﻿<html><head></head>
<body>

<div><font class="Apple-style-span" size="4" face="Consolas"><br></font></div><div><font class="Apple-style-span" size="4" face="Consolas"><br></font></div><div><font class="Apple-style-span" size="4" face="Consolas">典型模块一书代码</font></div><div><font class="Apple-style-span" size="4" face="Consolas">php &amp; web 一书的相关代码实践</font></div><div><font class="Apple-style-span" size="4" face="Consolas">TP视频、实践、手册（略看）</font></div><div><font class="Apple-style-span" size="4" face="Consolas">架构LNMP、LAMP</font></div><div><font class="Apple-style-span" size="4" face="Consolas">电子商务</font></div><div><font class="Apple-style-span" size="4" face="Consolas"><br></font></div><div><font class="Apple-style-span" size="4" face="Consolas">部署到Linux</font></div><div><font class="Apple-style-span" size="4" face="Consolas"><br></font></div><div><font class="Apple-style-span" size="4" face="Consolas">navicate</font></div><div><font class="Apple-style-span" size="4" face="Consolas"><br></font></div><div><font class="Apple-style-span" size="4" face="Consolas">Google Chrome访问百度：</font></div><div><font class="Apple-style-span" size="4" face="Consolas"><br></font></div><div><font class="Apple-style-span" size="4" face="Consolas">您的连接不是私密连接</font></div><div><font class="Apple-style-span" size="4" face="Consolas"><br></font></div><div><font class="Apple-style-span" size="4"><!--StartFragment--><p i18n-values=".innerHTML:explanationParagraph" style="color: rgb(105, 105, 105); font-size: 15px; font-style: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(247, 247, 247); "><font class="Apple-style-span" face="Consolas">www.baidu.com 通常会使用加密技术来保护您的信息。Google Chrome 此次尝试连接到 www.baidu.com 时，此网站发回了异常的错误凭据。这可能是因为有攻击者在试图冒充 www.baidu.com，或 Wi-Fi 登录屏幕中断了此次连接。请放心，您的信息仍然是安全的，因为 Google Chrome 尚未进行任何数据交换便停止了连接。</font></p><p i18n-values=".innerHTML:finalParagraph" id="final-paragraph" style="margin-top: 20px; color: rgb(105, 105, 105); font-size: 15px; font-style: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(247, 247, 247); "><font class="Apple-style-span" face="Consolas">您目前无法访问www.baidu.com，因为此网站<a href="data:text/html;charset=utf-8,%3C!doctype%20html%3E%0A%3Chtml%20i18n-values=%22dir%3Atextdirection;lang%3Alanguage%22%3E%0A%3Chead%3E%0A%20%20%3Cmeta%20charset=%22utf-8%22%3E%0A%20%20%3Cmeta%20name=%22viewport%22%0A%20%20%20%20%20%20content=%22initial-scale=1,%20minimum-scale=1,%20width=device-width%22%3E%0A%20%20%3Ctitle%20i18n-content=%22tabTitle%22%3E%3C/title%3E%0A%20%20%3Cstyle%3E/*%20Copyright%202014%20The%20Chromium%20Authors.%20All%20rights%20reserved.%0A%20%20%20Use%20of%20this%20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A%20%20%20found%20in%20the%20LICENSE%20file.%20*/%0A%0Aa%20%7B%0A%20%20color%3A%20%23585858;%0A%7D%0A%0A.bad-clock%20.icon%20%7B%0A%20%20background-image%3A%20-webkit-image-set(%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,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)%201x,%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,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)%202x);%0A%7D%0A%0Abody%20%7B%0A%20%20background-color%3A%20%23f7f7f7;%0A%20%20color%3A%20%23646464;%0A%7D%0A%0Abody.safe-browsing%20%7B%0A%20%20background-color%3A%20rgb(206,%2052,%2038);%0A%20%20color%3A%20white;%0A%7D%0A%0Abutton%20%7B%0A%20%20-webkit-user-select%3A%20none;%0A%20%20background%3A%20rgb(66,%20133,%20244);%0A%20%20border%3A%200;%0A%20%20border-radius%3A%202px;%0A%20%20box-sizing%3A%20border-box;%0A%20%20color%3A%20%23fff;%0A%20%20cursor%3A%20pointer;%0A%20%20float%3A%20right;%0A%20%20font-size%3A%20.875em;%0A%20%20margin%3A%200;%0A%20%20padding%3A%2010px%2024px;%0A%20%20transition%3A%20box-shadow%20200ms%20cubic-bezier(0.4,%200,%200.2,%201);%0A%7D%0A%0A%5Bdir='rtl'%5D%20button%20%7B%0A%20%20float%3A%20left;%0A%7D%0A%0Abutton%3Aactive%20%7B%0A%20%20background%3A%20rgb(50,%20102,%20213);%0A%20%20outline%3A%200;%0A%7D%0A%0Abutton%3Ahover%20%7B%0A%20%20box-shadow%3A%200%201px%203px%20rgba(0,%200,%200,%20.50);%0A%7D%0A%0A%23debugging%20%7B%0A%20%20display%3A%20inline;%0A%20%20overflow%3A%20auto;%0A%7D%0A%0A.debugging-content%20%7B%0A%20%20line-height%3A%201em;%0A%20%20margin-bottom%3A%200;%0A%20%20margin-top%3A%201em;%0A%7D%0A%0A.debugging-title%20%7B%0A%20%20font-weight%3A%20bold;%0A%7D%0A%0A%23details%20%7B%0A%20%20color%3A%20%23696969;%0A%20%20margin%3A%2045px%200%2050px;%0A%7D%0A%0A%23details%20p%3Anot(%3Afirst-of-type)%20%7B%0A%20%20margin-top%3A%2020px;%0A%7D%0A%0A%23details-button%20%7B%0A%20%20background%3A%20inherit;%0A%20%20border%3A%200;%0A%20%20float%3A%20none;%0A%20%20margin%3A%200;%0A%20%20padding%3A%2010px%200;%0A%20%20text-transform%3A%20uppercase;%0A%7D%0A%0A%23details-button%3Ahover%20%7B%0A%20%20box-shadow%3A%20inherit;%0A%20%20text-decoration%3A%20underline;%0A%7D%0A%0A.error-code%20%7B%0A%20%20color%3A%20%23696969;%0A%20%20display%3A%20inline;%0A%20%20font-size%3A%20.86667em;%0A%20%20margin-top%3A%2015px;%0A%20%20opacity%3A%20.5;%0A%20%20text-transform%3A%20uppercase;%0A%7D%0A%0A%23error-debugging-info%20%7B%0A%20%20font-size%3A%200.8em;%0A%7D%0A%0Ah1%20%7B%0A%20%20color%3A%20%23333;%0A%20%20font-size%3A%201.6em;%0A%20%20font-weight%3A%20normal;%0A%20%20line-height%3A%201.25em;%0A%20%20margin-bottom%3A%2016px;%0A%7D%0A%0Ah2%20%7B%0A%20%20font-size%3A%201.2em;%0A%20%20font-weight%3A%20normal;%0A%7D%0A%0A.hidden%20%7B%0A%20%20display%3A%20none;%0A%7D%0A%0Ahtml%20%7B%0A%20%20-webkit-text-size-adjust%3A%20100%25;%0A%20%20font-size%3A%20125%25;%0A%7D%0A%0A.icon%20%7B%0A%20%20background-repeat%3A%20no-repeat;%0A%20%20background-size%3A%20100%25;%0A%20%20height%3A%2072px;%0A%20%20margin%3A%200%200%2040px;%0A%20%20width%3A%2072px;%0A%7D%0A%0Ainput%5Btype=checkbox%5D%20%7B%0A%20%20opacity%3A%200;%0A%7D%0A%0Ainput%5Btype=checkbox%5D%3Afocus%20~%20.checkbox%20%7B%0A%20%20outline%3A%20-webkit-focus-ring-color%20auto%205px;%0A%7D%0A%0A.interstitial-wrapper%20%7B%0A%20%20box-sizing%3A%20border-box;%0A%20%20font-size%3A%201em;%0A%20%20line-height%3A%201.6em;%0A%20%20margin%3A%20100px%20auto%200;%0A%20%20max-width%3A%20600px;%0A%20%20width%3A%20100%25;%0A%7D%0A%0A%23main-message%20%3E%20p%20%7B%0A%20%20display%3A%20inline;%0A%7D%0A%0A%23extended-reporting-opt-in%20%7B%0A%20%20font-size%3A%20.875em;%0A%20%20margin-top%3A%2039px;%0A%7D%0A%0A%23extended-reporting-opt-in%20label%20%7B%0A%20%20position%3A%20relative;%0A%7D%0A%0A.nav-wrapper%20%7B%0A%20%20margin-top%3A%2051px;%0A%7D%0A%0A.nav-wrapper%3A%3Aafter%20%7B%0A%20%20clear%3A%20both;%0A%20%20content%3A%20'';%0A%20%20display%3A%20table;%0A%20%20width%3A%20100%25;%0A%7D%0A%0A.safe-browsing%20%3A-webkit-any(%0A%20%20%20%20a,%20%23details,%20%23details-button,%20h1,%20h2,%20p,%20.small-link)%20%7B%0A%20%20color%3A%20white;%0A%7D%0A%0A.safe-browsing%20button%20%7B%0A%20%20background-color%3A%20rgba(255,%20255,%20255,%20.15);%0A%7D%0A%0A.safe-browsing%20button%3Aactive%20%7B%0A%20%20background-color%3A%20rgba(255,%20255,%20255,%20.25);%0A%7D%0A%0A.safe-browsing%20button%3Ahover%20%7B%0A%20%20box-shadow%3A%200%202px%203px%20rgba(0,%200,%200,%20.5);%0A%7D%0A%0A.safe-browsing%20.error-code%20%7B%0A%20%20display%3A%20none;%0A%7D%0A%0A.safe-browsing%20.icon%20%7B%0A%20%20background-image%3A%20-webkit-image-set(%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,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)%201x,%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,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)%202x);%0A%7D%0A%0A.small-link%20%7B%0A%20%20color%3A%20%23696969;%0A%20%20font-size%3A%20.875em;%0A%7D%0A%0A.ssl%20.icon%20%7B%0A%20%20background-image%3A%20-webkit-image-set(%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,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)%201x,%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAADQmBKKAAACx1BMVEUAAADcRDfbSDjbRTfbRDfhSzwAAADbRDjbRzjbRTjbQzbaRDfaRDbcRDfTQyzXQzbZQDPbRDfcRDfbRTm/QCDaQzfbQzbaQzbMMzPbQzfbQzXaQzfeRjrbQjbVOSvbRDfaQzbaQzfFPDLZQjfZQzbVQCvZQzXaQjXaRDbXQTfbQzfaQTPZQTa/QADaQzbcRDjZQjXaQzfbRDTaQzbaQzbbQzfbQzfaRDfbQzbHQDTMMzPbNzfaQjfbQzbaQzfbRDbWQDTZQzfaQDXEPTHXQTbGPTHbRDbYQTTVRDPaQzbaRDXaQTXZQzXbRDfXQDDXRDTaRDbbQzbGPDLHPTPZQjTbRDfPQDDbRDbYQjbbRDbaQjbZQjbaQzfaQzfaQzXaQzbbJCTDPTDFPTTFPDLaQzbbRDbbPTHLPDXbQzbbQzfbRDfgSTnSPC3EPTHbRTfbQzbbRDfbQzbaRDfEPTHFPDLaQzbGPTLaQzatNiuiMiioNCntoZuuNivsoJrLlJCxNiy3OC2vNizz8/O3OC7Ok47+/v7x8fHWQTXMk4+9Oi739/f19fXw8PD29vb09PSlMymfMSfZQjW1Ny2zNyy7OS6nNCn4+Pjy8vKvNiu4OC2/Oy/WQjXYQjXMlI+sNSvVQTWpNCqjMimdMCfAOy/v7++4OC6+Oi/Rl5K1OC3////8/PzFPDHNk477+/u6OS7XQjX6+vq0Nyy5OC67OS+5OS29Oi/Qko3BOy+8OS/DPDCkMinSl5LPk47Rk46wNiy8Oi6/OjDAOzCeMCe2OC3CPDDCOzDDPDG5OS6sNCrEPTGyNizEPDGgMSfBOzD9/f3Qk46tNSvnnZezNizDOzHonpi0Ny2uNSvOlI+1Nyz5+fm7Oi7NlJDNlI/TmJOjMiioNCqqNCq4OS3Oko3MlZDVQTSrNCqmMynPko2sNSrQlpGhMijFPTHbRDeKorW+AAAAeHRSTlMA2UCB7CIB8zLIt8j4vhcTFPzYVQjk/qQF95TJVFUS+p37vl16DDVh6jOoNy8Eir9luzHC4+gqte9ACg6DhZmpLJUw80eB0yce3XxSV+kgQFrF+jI2zBC4QvBZUZ/ffcEH2VTHq/0VIpu2sTER2cewYmOe7Nj67Nj6WWwvAAAICklEQVR4AezV105bQRDG8TEuxj4uOMEdgxG9QOggOgjRC0j0fgGIFKVEQn7p7yFyOcc4gR1r9+Rmf/f/0Vh7vEuWIsuyLMuyrNm+joXFpTOnMpnPT1acs6XFhY6+Wfo/mkqF9Qz+IrNeKDWRx5Ijoym8ITU6kiTvLJdjeFesvEzemJqGoukpMq+10A5l7YVWMuwgDZH0AZkUmn+E0ON8iIzJZVGHbI4MaY6iLtFmQ+f1gFqx4krP2sBG4v4+sTGw1rNSjKHWg5lTG8ZrW9tjNceRG9vewmvDZMAOquWz5//44aHzbB7Vdgw8XXuoEt2nN+xHUWVP/+PWD7feQ3rHYS/c+kmzbrgdKbycySO4dZNeUbg4cyrJXBEun0mrY7icnKpFpydwOSadnsHS35Qf4jTYs9Y7+gLsUr27BLvQeV/vgo1LwnGwXdLnmsemBiXhYIrLa9Lnhsf+kJVfuLwhbTbBfsrSX2CbpEuJh2YSsjSR4bZEunTyUEfaOtx2ki6/eeittL3ltky63PHQK2l7xe0d6VLhoavSdpXbCukywUOfpO0TtxOkywwP7ZK2XdzOkC4vPHRI2g5x+0K6gHkb24XsQnYhu9BXf9wXhj5hX9zfSHVr+QATfC1Ul+B3mBIJklxDAOYEGuT7tMGkNulGwQDMCghPLQLTIrL/F8z7SAI+mOcT7NMILwhuSD+84CdlcXjhk/lPyNhHFIYXwqQM3rAL2YXsQmbZhexCf3q3n622qigM4Dpz3jfoCzh27OoL2CeoHThypMsFIX9aUrgthJQ0BCjYhoJEmpZrLhgIkYYkGBtJAmrqfzSpSFTsQ7i/szm5d2VxbMm695wpk9/69j4n3+AyNKT+WyCgHzT08KFSFEinA5pB8ECk8OynV5/pBcGjEgX20+n0KkT6QPCoRAHBWc1knukDwaMQ8bxY9K1OkEKEecFDnMzP/8xrAqlFcn9Ik8kEF9vzekBqUddDomC5XK7OawCpRdKDgOCZrNeRkQaQQmR7MsIzWT85QUZ6QL0ieLDQmVMPnZOTwcH89aQukFM0MsSeVYDgWSyX6/U6efJ5f1IXyBaNjIwMBdI4pOl6KB8CdXyFpCaQFAG0v+/cn0XsM4F+z98mkC+U1ASCiPMhDvaHH6AgxVMmTh6HPAstiPSAIBoBKN3NBx4xL4Budzq+Vrt9HE/qAUEEDgJy3nfynDzA/nQ6LXiqVSupCwSR4ODI95BAD0Q+mFf7mEADd5K6QPz8pDke+v3i9xCeTiLRagnPwIB/9ntDG6i7PgiI94fmhfVJ0Lza1eOq3+8vhJ4bOkDwOH7ApqePsD/YZ/Lw/lA+A7OFQmjvqaED5Og/8EyPHYEj8vH5yAMQOKE9y0JGXoPgsQdGnrGJe3maVz6RSCy0jtvH9ykemldhby9uWabhNUh6MC86Y0L0K97njtjnKgZWgIcCsnZ3c4a3IPZIDmmIMzE+fhPjWuB50ToTiDgr1k/h5WWIvAPBIy98MMiesYnxieihzyfvO+WDcSGf5fA1iDwD4QFy9rEgPBQQnehj4pDnb8oHnj3i0Fmms5Y1vALJB7Hbf47IA1B0PDr8mPfHPytAyAccgO5C5AVI9h/h4d/Te8QhTzQ6PDx8A+uMgEJOz7W1NdNMGV6AZD4Aif6D9/BQzAuemZltgHC/LHjChEE+AEHkOggeZ/+Z5P5zk+Jhz+jMNsYFj9hnaOjcNdfpQOQqiH8vIOrtP4fkAWiUzsHpvFZoXoiH81k313O54p+ugpDPGf0HvxedH8ERnkjkgO8X3h+5PxRQbj2XzRYNl0FIR/afOjyirqL/3EA+M6MROk9O3x/sz9qyGBgmls1ld7Ilw9WR/ebYH84HHp/oP9sIiECfbCAf3h+YOB8zl6OAsqnUnOEmaP5Tul6rmNcZ/ecPcOCJxy08h7u8PyZA4EwRh07DcBEEkb0/gz39ZztCoif8/IQ5Hbk/HM8tgIoN90AQfQEPArL7T0v2n4NIZAOeld0w4pEcBDRFHmiKxVLJTRBEwfIkcWif0X983H9EPfQXNv7CvOzfC6zz5xQQcRh0q1hMuQnC+ey+fH/QfxLd/uN39B+eFx1xvRzzQkDugiD6hvLh/RHj6u0/2B8ZD2kEiOOBx20Qzsc/yH22+w88iIf7T3eBcMGyuamUOEUCzZUa7i41i2aFB/NS9h/7fmGf5UITp7HkNgiikLhgzv2R/Scs+88a1tnEuOS8UqXSXKNRqbgPgojfZ3Hd/aL/fBfv6T9yn4WG8ynB03QfBFGcfr9kPmf2n3WT89lJ4UDE+Wx6kRBEd+DB/ZL9Z6W3/2CfRUB4f0pYoAoC8iQhiHaRD9+vEO9zuLf/ZKcc8QC01Gx6BILoOTyzBFL2Hzrd/WmQh06zUvPsY5TY06rwhM7sP5jXjhwYFrrSaGzSwGpve/e5TmzKX7hO+cRV/QcYkQ/2uYF8KKD3Xx305otziyge2X94f8ze/lMECJwl4jRrtdpFLz/5iv0SUvYfpOPYHxwBuuTpR3Gx7Mv7T4oCWoIGnNqjy95+NhhLWRZx4LH7Dzh2/ymBw6CtWu3Ka+c4F170ISp1+495dv/hdd5EPhTQu55/ehr78iX9ByCMawueq55/nAuRov/QmROFo4lxifPBezo+X4599b/9h/MR83rnLR0feEOk7j/2Om89+ujcHkytrz36Wtl/wKlwPlcxrz7Ohdf7ESn7jxzYh7hffZ43zv9vFLF/Vf0Hv6dXLl66fH7Gf0i3E4sWdg3XAAAAAElFTkSuQmCC)%202x);%0A%7D%0A%0A.captive-portal%20.icon%20%7B%0A%20%20background-image%3A%20-webkit-image-set(%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAAEyElEQVR4Xu3afWhVZRwH8LvdmjVSjKyQbKazia1k1sL6YzXoZdy28/J8f5XRC7hwEVk0hZQCXY2SipCgYgappXMQ5Ya9ELZqoEM3VHqxBkapm21jOBWmbLfudk+0Peeu2+mc3zk9514WbN9/zz18ds75Pc/vPM+JTP9NZzrT+b9Fn2nGxHrainb8ggEaRgLn0IOjaMFroloU/Ssg1yxBLZpxBD00QufpODrRiFX6IiUKXY8XcRAJsryC3nRL7EpsQJ/r0V3iSS0/MKU4D6uoQwLY/P1q4i0aYX9xVqyPRH1jbr8UtfSbE8CDqIK60wBjOEb7aDf24CBO/gN12LjJF4dM+dPAoNgMdNkUxLENQltAFViJdbTWfFTcaRbiMXyCpE1CM4vR5uAzdwB/hcxCDI5jXqGFeAadNJoGH0ErVhg3YPs46Ad9JldNS3GCAbDPkFGG/eJGWktn3PA4IUB3oxPzGY4AXSBLCSTLgfZxx2MLV1Q5tFHeWxWQDNalHulWeo4q9GW4VVShng5J0KgZ8+bkYpcEqIJk6H2y0CiW4H58gGMYQhyn8DlqUUltZIk1XF01kKUW5yhm3gVB3Q76MDaRyXBQR1aIIJnyi6jNZUgs8uTQfUiGDJIxZ9OPfxEwhAO0F70To5NR5skxrsUgWaGDZLQCHBHVxnKxWjwuivRS7McK7na1kpUZkEwUzXbFiZfZcVk8pE6xZ3u34AV5TFJUsV2ObBHU0+Q5wu0eJ21krw+eD4lzBvOYf7wLeyI5DEfLx2l1DPqoSXK8SItis/gm41mlago/9P2UApklZE0pkHhdAv6YIiB8NwEQL9HvUwCkzZHz15g5Gw8jmR0QtsizvOoACUjAIdlOZQUkHpCgDqd1gwRslhX3djZAmDsBwpATJPtDUZPqGFuyUWU453IWu7fFHZOvhjiQ+aqiDheQ/bJjXpf2oP+caRA+cgPJpkxckeZfiIHMgmirC8gee4rz0qF6KV3IJEi86R8kg0oazQ6Iv2Uyoiajt4x/qJ1BfcCe6JQZC/BQ82XvDLYHJPUEK3tmYHTmlotpbzCSwsDomDpc+mD6VgHETB3M5Or2c5xUBvGTq7P98DjBEjqrBOLbD2eDZj7o+aJdhnhooJxUbd/r1cJ+yl1mJMMBGWUSP6zlezT5SIirGNKacEB4bwKEXcxrEN7gThUGSCtILaZXMC+KiGN+5kHYITndkSj7Ko3GTIPMEvtJFKt9LDYgiZtVQTLnqUPUOJcV8KWE95df4m85ps0+CQ/ig68xN72lscF4yveCFTa5g9AXnDR5lczC1Jr+4UhuCsAv6YlH3EDURFbgPCG3Y2altmPG9FIJ8LnoOYLbXNDzgi+Myvkqii9sIuocAHZZuN9tAKi6hnaiBwka9f942y2rzFcut4tZOO+3r5J6xcVmYEeKc9xlPuC3FhDHynBA6LQ5GGA2ftnNl82RqDrIDgb1ZU4AnxzUTc7raDeWhwPCUW0BA/C7gYeP9cWqILSUX8YAgmxxIoF3tYL/DkK9Y/znwm8CI4lvRLV+dVAQThOpOPht8p+ogZ4W9/jijFFD5eXhWPgPCXjMh/pSVYD6pxaywPGOKOIBWfkYhXYKozgvy5/rYBva8avzcx19sSrgT2jJnjJMVMiUAAAAAElFTkSuQmCC)%201x,%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,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)%202x);%0A%7D%0A%0A.checkbox%20%7B%0A%20%20background%3A%20transparent;%0A%20%20border%3A%201px%20solid%20white;%0A%20%20border-radius%3A%202px;%0A%20%20display%3A%20block;%0A%20%20height%3A%2014px;%0A%20%20left%3A%200;%0A%20%20position%3A%20absolute;%0A%20%20right%3A%200;%0A%20%20top%3A%20-1px;%0A%20%20width%3A%2014px;%0A%7D%0A%0A.checkbox%3A%3Abefore%20%7B%0A%20%20background%3A%20transparent;%0A%20%20border%3A%202px%20solid%20white;%0A%20%20border-right-width%3A%200;%0A%20%20border-top-width%3A%200;%0A%20%20content%3A%20'';%0A%20%20height%3A%204px;%0A%20%20left%3A%202px;%0A%20%20opacity%3A%200;%0A%20%20position%3A%20absolute;%0A%20%20top%3A%203px;%0A%20%20transform%3A%20rotate(-45deg);%0A%20%20width%3A%209px;%0A%7D%0A%0A.ssl-opt-in%20.checkbox%20%7B%0A%20%20border-color%3A%20%23696969;%0A%7D%0A%0A.ssl-opt-in%20.checkbox%3A%3Abefore%20%7B%0A%20%20border-color%3A%20%23696969;%0A%7D%0A%0Ainput%5Btype=checkbox%5D%3Achecked%20~%20.checkbox%3A%3Abefore%20%7B%0A%20%20opacity%3A%201;%0A%7D%0A%0A@media%20(max-width%3A%20700px)%20%7B%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20padding%3A%200%2010%25;%0A%20%20%7D%0A%0A%20%20%23error-debugging-info%20%7B%0A%20%20%20%20overflow%3A%20auto;%0A%20%20%7D%0A%7D%0A%0A@media%20(max-height%3A%20600px)%20%7B%0A%20%20.error-code%20%7B%0A%20%20%20%20margin-top%3A%2010px;%0A%20%20%7D%0A%7D%0A%0A@media%20(max-width%3A%20420px)%20%7B%0A%20%20button,%0A%20%20%5Bdir='rtl'%5D%20button,%0A%20%20.small-link%20%7B%0A%20%20%20%20float%3A%20none;%0A%20%20%20%20font-size%3A%20.825em;%0A%20%20%20%20font-weight%3A%20400;%0A%20%20%20%20margin%3A%200;%0A%20%20%20%20text-transform%3A%20uppercase;%0A%20%20%20%20width%3A%20100%25;%0A%20%20%7D%0A%0A%20%20%23details%20%7B%0A%20%20%20%20margin%3A%2020px%200%2020px%200;%0A%20%20%7D%0A%0A%20%20%23details%20p%3Anot(%3Afirst-of-type)%20%7B%0A%20%20%20%20margin-top%3A%2010px;%0A%20%20%7D%0A%0A%20%20%23details-button%20%7B%0A%20%20%20%20display%3A%20block;%0A%20%20%20%20margin-top%3A%2020px;%0A%20%20%20%20text-align%3A%20center;%0A%20%20%20%20width%3A%20100%25;%0A%20%20%7D%0A%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20padding%3A%200%205%25;%0A%20%20%7D%0A%0A%20%20%23extended-reporting-opt-in%20%7B%0A%20%20%20%20margin-top%3A%2024px;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20margin-top%3A%2030px;%0A%20%20%7D%0A%7D%0A%0A/**%0A%20*%20Mobile%20specific%20styling.%0A%20*%20Navigation%20buttons%20are%20anchored%20to%20the%20bottom%20of%20the%20screen.%0A%20*%20Details%20message%20replaces%20the%20top%20content%20in%20its%20own%20scrollable%20area.%0A%20*/%0A%0A@media%20(max-width%3A%20420px)%20and%20(max-height%3A%20736px)%20and%20(orientation%3A%20portrait)%20%7B%0A%20%20%23details-button%20%7B%0A%20%20%20%20border%3A%200;%0A%20%20%20%20margin%3A%208px%200%200;%0A%20%20%7D%0A%0A%20%20.secondary-button%20%7B%0A%20%20%20%20-webkit-margin-end%3A%200;%0A%20%20%20%20margin-top%3A%2016px;%0A%20%20%7D%0A%7D%0A%0A/*%20Fixed%20nav.%20*/%0A@media%20(min-width%3A%20240px)%20and%20(max-width%3A%20420px)%20and%0A%20%20%20%20%20%20%20(min-height%3A%20401px)%20and%20(max-height%3A%20736px)%20and%20(orientation%3Aportrait),%0A%20%20%20%20%20%20%20(min-width%3A%20421px)%20and%20(max-width%3A%20736px)%20and%20(min-height%3A%20240px)%20and%0A%20%20%20%20%20%20%20(max-height%3A%20420px)%20and%20(orientation%3Alandscape)%20%7B%0A%20%20body%20.nav-wrapper%20%7B%0A%20%20%20%20background%3A%20%23f7f7f7;%0A%20%20%20%20bottom%3A%200;%0A%20%20%20%20box-shadow%3A%200%20-22px%2040px%20rgb(247,%20247,%20247);%0A%20%20%20%20left%3A%200;%0A%20%20%20%20margin%3A%200;%0A%20%20%20%20max-width%3A%20736px;%0A%20%20%20%20padding-left%3A%2024px;%0A%20%20%20%20padding-right%3A%2024px;%0A%20%20%20%20position%3A%20fixed;%0A%20%20%20%20z-index%3A%201;%0A%20%20%7D%0A%0A%20%20body.safe-browsing%20.nav-wrapper%20%7B%0A%20%20%20%20background%3A%20rgb(206,%2052,%2038);%0A%20%20%20%20box-shadow%3A%200%20-22px%2040px%20rgb(206,%2052,%2038);%0A%20%20%7D%0A%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20max-width%3A%20736px;%0A%20%20%7D%0A%0A%20%20%23details,%0A%20%20%23main-content%20%7B%0A%20%20%20%20padding-bottom%3A%2040px;%0A%20%20%7D%0A%7D%0A%0A@media%20(max-width%3A%20420px)%20and%20(max-height%3A%20736px)%20and%20(orientation%3A%20portrait),%0A%20%20%20%20%20%20%20(max-width%3A%20736px)%20and%20(max-height%3A%20420px)%20and%20(orientation%3A%20landscape)%20%7B%0A%20%20body%20%7B%0A%20%20%20%20margin%3A%200%20auto;%0A%20%20%7D%0A%0A%20%20button,%0A%20%20%5Bdir='rtl'%5D%20button,%0A%20%20button.small-link%20%7B%0A%20%20%20%20font-family%3A%20Roboto-Regular,Helvetica;%0A%20%20%20%20font-size%3A%20.933em;%0A%20%20%20%20font-weight%3A%20600;%0A%20%20%20%20margin%3A%206px%200;%0A%20%20%20%20text-transform%3A%20uppercase;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20box-sizing%3A%20border-box;%0A%20%20%20%20padding-bottom%3A%208px;%0A%20%20%20%20width%3A%20100%25;%0A%20%20%7D%0A%0A%20%20.error-code%20%7B%0A%20%20%20%20margin-top%3A%200;%0A%20%20%7D%0A%0A%20%20%23details%20%7B%0A%20%20%20%20box-sizing%3A%20border-box;%0A%20%20%20%20height%3A%20auto;%0A%20%20%20%20margin%3A%200;%0A%20%20%20%20opacity%3A%201;%0A%20%20%20%20transition%3A%20opacity%20250ms%20cubic-bezier(0.4,%200,%200.2,%201);%0A%20%20%7D%0A%0A%20%20%23details.hidden,%0A%20%20%23main-content.hidden%20%7B%0A%20%20%20%20display%3A%20block;%0A%20%20%20%20height%3A%200;%0A%20%20%20%20opacity%3A%200;%0A%20%20%20%20overflow%3A%20hidden;%0A%20%20%20%20transition%3A%20none;%0A%20%20%7D%0A%0A%20%20%23details-button%20%7B%0A%20%20%20%20padding-bottom%3A%2016px;%0A%20%20%20%20padding-top%3A%2016px;%0A%20%20%7D%0A%0A%20%20h1%20%7B%0A%20%20%20%20font-size%3A%201.5em;%0A%20%20%20%20margin-bottom%3A%208px;%0A%20%20%7D%0A%0A%20%20.icon%20%7B%0A%20%20%20%20margin-bottom%3A%2012px;%0A%20%20%7D%0A%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20box-sizing%3A%20border-box;%0A%20%20%20%20margin%3A%2024px%20auto%2012px;%0A%20%20%20%20padding%3A%200%2024px;%0A%20%20%20%20position%3A%20relative;%0A%20%20%7D%0A%0A%20%20.interstitial-wrapper%20p%20%7B%0A%20%20%20%20font-size%3A%20.95em;%0A%20%20%20%20line-height%3A%201.61em;%0A%20%20%20%20margin-top%3A%208px;%0A%20%20%7D%0A%0A%20%20%23main-content%20%7B%0A%20%20%20%20margin%3A%200;%0A%20%20%20%20transition%3A%20opacity%20100ms%20cubic-bezier(0.4,%200,%200.2,%201);%0A%20%20%7D%0A%0A%20%20.small-link%20%7B%0A%20%20%20%20border%3A%200;%0A%20%20%7D%0A%0A%20%20.suggested-left%20%3E%20%23control-buttons,%0A%20%20.suggested-right%20%3E%20%23control-buttons%20%7B%0A%20%20%20%20float%3A%20none;%0A%20%20%20%20margin%3A%200;%0A%20%20%7D%0A%7D%0A%0A@media%20(min-height%3A%20400px)%20and%20(orientation%3Aportrait)%20%7B%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20margin-bottom%3A%20145px;%0A%20%20%7D%0A%7D%0A%0A@media%20(min-height%3A%20299px)%20and%20(orientation%3Aportrait)%20%7B%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20padding-bottom%3A%2016px;%0A%20%20%7D%0A%7D%0A%0A@media%20(min-height%3A%20405px)%20and%20(max-height%3A%20736px)%20and%0A%20%20%20%20%20%20%20(max-width%3A%20420px)%20and%20(orientation%3Aportrait)%20%7B%0A%20%20.icon%20%7B%0A%20%20%20%20margin-bottom%3A%2024px;%0A%20%20%7D%0A%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20margin-top%3A%2064px;%0A%20%20%7D%0A%7D%0A%0A@media%20(min-height%3A%20480px)%20and%20(max-width%3A%20420px)%20and%0A%20%20%20%20%20%20%20(max-height%3A%20736px)%20and%20(orientation%3A%20portrait),%0A%20%20%20%20%20%20%20(min-height%3A%20338px)%20and%20(max-height%3A%20420px)%20and%20(max-width%3A%20736px)%20and%0A%20%20%20%20%20%20%20(orientation%3A%20landscape)%20%7B%0A%20%20.icon%20%7B%0A%20%20%20%20margin-bottom%3A%2024px;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20padding-bottom%3A%2024px;%0A%20%20%7D%0A%7D%0A%0A@media%20(min-height%3A%20500px)%20and%20(max-width%3A%20414px)%20and%20(orientation%3A%20portrait)%20%7B%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20margin-top%3A%2096px;%0A%20%20%7D%0A%7D%0A%0A/*%20Phablet%20sizing%20*/%0A@media%20(min-width%3A%20375px)%20and%20(min-height%3A%20641px)%20and%20(max-height%3A%20736px)%20and%0A%20%20%20%20%20%20%20(max-width%3A%20414px)%20and%20(orientation%3A%20portrait)%20%7B%0A%20%20button,%0A%20%20%5Bdir='rtl'%5D%20button,%0A%20%20.small-link%20%7B%0A%20%20%20%20font-size%3A%201em;%0A%20%20%20%20padding-bottom%3A%2012px;%0A%20%20%20%20padding-top%3A%2012px;%0A%20%20%7D%0A%0A%20%20body%3Anot(.offline)%20.icon%20%7B%0A%20%20%20%20height%3A%2080px;%0A%20%20%20%20width%3A%2080px;%0A%20%20%7D%0A%0A%20%20%23details-button%20%7B%0A%20%20%20%20margin-top%3A%2028px;%0A%20%20%7D%0A%0A%20%20h1%20%7B%0A%20%20%20%20font-size%3A%201.7em;%0A%20%20%7D%0A%0A%20%20.icon%20%7B%0A%20%20%20%20margin-bottom%3A%2028px;%0A%20%20%7D%0A%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20padding%3A%2028px;%0A%20%20%7D%0A%0A%20%20.interstitial-wrapper%20p%20%7B%0A%20%20%20%20font-size%3A%201.05em;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20padding%3A%2028px;%0A%20%20%7D%0A%7D%0A%0A@media%20(min-width%3A%20420px)%20and%20(max-width%3A%20736px)%20and%0A%20%20%20%20%20%20%20(min-height%3A%20240px)%20and%20(max-height%3A%20298px)%20and%0A%20%20%20%20%20%20%20(orientation%3Alandscape)%20%7B%0A%20%20body%3Anot(.offline)%20.icon%20%7B%0A%20%20%20%20height%3A%2050px;%0A%20%20%20%20width%3A%2050px;%0A%20%20%7D%0A%0A%20%20.icon%20%7B%0A%20%20%20%20padding-top%3A%200;%0A%20%20%7D%0A%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20margin-top%3A%2016px;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20padding%3A%200%2024px%208px;%0A%20%20%7D%0A%7D%0A%0A@media%20(min-width%3A%20420px)%20and%20(max-width%3A%20736px)%20and%0A%20%20%20%20%20%20%20(min-height%3A%20240px)%20and%20(max-height%3A%20420px)%20and%0A%20%20%20%20%20%20%20(orientation%3Alandscape)%20%7B%0A%20%20%23details-button%20%7B%0A%20%20%20%20margin%3A%200;%0A%20%20%7D%0A%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20margin-bottom%3A%2070px;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20margin-top%3A%200;%0A%20%20%7D%0A%0A%20%20%23extended-reporting-opt-in%20%7B%0A%20%20%20%20margin-top%3A%200;%0A%20%20%7D%0A%7D%0A%0A/*%20Phablet%20landscape%20*/%0A@media%20(min-width%3A%20680px)%20and%20(max-height%3A%20414px)%20%7B%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20margin%3A%2024px%20auto;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20margin%3A%2016px%20auto%200;%0A%20%20%7D%0A%7D%0A%0A@media%20(max-height%3A%20240px)%20and%20(orientation%3A%20landscape),%0A%20%20%20%20%20%20%20(max-height%3A%20480px)%20and%20(orientation%3A%20portrait),%0A%20%20%20%20%20%20%20(max-width%3A%20419px)%20and%20(max-height%3A%20323px)%20%7B%0A%20%20body%3Anot(.offline)%20.icon%20%7B%0A%20%20%20%20height%3A%2056px;%0A%20%20%20%20width%3A%2056px;%0A%20%20%7D%0A%0A%20%20.icon%20%7B%0A%20%20%20%20margin-bottom%3A%2016px;%0A%20%20%7D%0A%7D%0A%0A/*%20Small%20mobile%20screens.%20No%20fixed%20nav.%20*/%0A@media%20(max-height%3A%20400px)%20and%20(orientation%3A%20portrait),%0A%20%20%20%20%20%20%20(max-height%3A%20239px)%20and%20(orientation%3A%20landscape),%0A%20%20%20%20%20%20%20(max-width%3A%20419px)%20and%20(max-height%3A%20399px)%20%7B%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20display%3A%20flex;%0A%20%20%20%20flex-direction%3A%20column;%0A%20%20%20%20margin-bottom%3A%200;%0A%20%20%7D%0A%0A%20%20%23details%20%7B%0A%20%20%20%20flex%3A%201%201%20auto;%0A%20%20%20%20order%3A%200;%0A%20%20%7D%0A%0A%20%20%23main-content%20%7B%0A%20%20%20%20flex%3A%201%201%20auto;%0A%20%20%20%20order%3A%200;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20flex%3A%200%201%20auto;%0A%20%20%20%20margin-top%3A%208px;%0A%20%20%20%20order%3A%201;%0A%20%20%20%20padding-left%3A%200;%0A%20%20%20%20padding-right%3A%200;%0A%20%20%20%20position%3A%20relative;%0A%20%20%20%20width%3A%20100%25;%0A%20%20%7D%0A%7D%0A%0A@media%20(max-width%3A%20239px)%20and%20(orientation%3A%20portrait)%20%7B%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20padding-left%3A%200;%0A%20%20%20%20padding-right%3A%200;%0A%20%20%7D%0A%7D%0A%3C/style%3E%0A%20%20%3Cscript%3E//%20Copyright%20(c)%202012%20The%20Chromium%20Authors.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A//%20//%20Copyright%20(c)%202013%20The%20Chromium%20Authors.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A/**%0A%20*%20@fileoverview%20Assertion%20support.%0A%20*/%0A%0A/**%0A%20*%20Verify%20%7Ccondition%7C%20is%20truthy%20and%20return%20%7Ccondition%7C%20if%20so.%0A%20*%20@template%20T%0A%20*%20@param%20%7BT%7D%20condition%20A%20condition%20to%20check%20for%20truthiness.%20%20Note%20that%20this%0A%20*%20%20%20%20%20may%20be%20used%20to%20test%20whether%20a%20value%20is%20defined%20or%20not,%20and%20we%20don't%20want%0A%20*%20%20%20%20%20to%20force%20a%20cast%20to%20Boolean.%0A%20*%20@param%20%7Bstring=%7D%20opt_message%20A%20message%20to%20show%20on%20failure.%0A%20*%20@return%20%7BT%7D%20A%20non-null%20%7Ccondition%7C.%0A%20*/%0Afunction%20assert(condition,%20opt_message)%20%7B%0A%20%20if%20(!condition)%20%7B%0A%20%20%20%20var%20message%20=%20'Assertion%20failed';%0A%20%20%20%20if%20(opt_message)%0A%20%20%20%20%20%20message%20=%20message%20+%20'%3A%20'%20+%20opt_message;%0A%20%20%20%20var%20error%20=%20new%20Error(message);%0A%20%20%20%20var%20global%20=%20function()%20%7B%20return%20this;%20%7D();%0A%20%20%20%20if%20(global.traceAssertionsForTesting)%0A%20%20%20%20%20%20console.warn(error.stack);%0A%20%20%20%20throw%20error;%0A%20%20%7D%0A%20%20return%20condition;%0A%7D%0A%0A/**%0A%20*%20Call%20this%20from%20places%20in%20the%20code%20that%20should%20never%20be%20reached.%0A%20*%0A%20*%20For%20example,%20handling%20all%20the%20values%20of%20enum%20with%20a%20switch()%20like%20this%3A%0A%20*%0A%20*%20%20%20function%20getValueFromEnum(enum)%20%7B%0A%20*%20%20%20%20%20switch%20(enum)%20%7B%0A%20*%20%20%20%20%20%20%20case%20ENUM_FIRST_OF_TWO%3A%0A%20*%20%20%20%20%20%20%20%20%20return%20first%0A%20*%20%20%20%20%20%20%20case%20ENUM_LAST_OF_TWO%3A%0A%20*%20%20%20%20%20%20%20%20%20return%20last;%0A%20*%20%20%20%20%20%7D%0A%20*%20%20%20%20%20assertNotReached();%0A%20*%20%20%20%20%20return%20document;%0A%20*%20%20%20%7D%0A%20*%0A%20*%20This%20code%20should%20only%20be%20hit%20in%20the%20case%20of%20serious%20programmer%20error%20or%0A%20*%20unexpected%20input.%0A%20*%0A%20*%20@param%20%7Bstring=%7D%20opt_message%20A%20message%20to%20show%20when%20this%20is%20hit.%0A%20*/%0Afunction%20assertNotReached(opt_message)%20%7B%0A%20%20assert(false,%20opt_message%20%7C%7C%20'Unreachable%20code%20hit');%0A%7D%0A%0A/**%0A%20*%20@param%20%7B*%7D%20value%20The%20value%20to%20check.%0A%20*%20@param%20%7Bfunction(new%3A%20T,%20...)%7D%20type%20A%20user-defined%20constructor.%0A%20*%20@param%20%7Bstring=%7D%20opt_message%20A%20message%20to%20show%20when%20this%20is%20hit.%0A%20*%20@return%20%7BT%7D%0A%20*%20@template%20T%0A%20*/%0Afunction%20assertInstanceof(value,%20type,%20opt_message)%20%7B%0A%20%20//%20We%20don't%20use%20assert%20immediately%20here%20so%20that%20we%20avoid%20constructing%20an%20error%0A%20%20//%20message%20if%20we%20don't%20have%20to.%0A%20%20if%20(!(value%20instanceof%20type))%20%7B%0A%20%20%20%20assertNotReached(opt_message%20%7C%7C%20'Value%20'%20+%20value%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'%20is%20not%20a%5Bn%5D%20'%20+%20(type.name%20%7C%7C%20typeof%20type));%0A%20%20%7D%0A%20%20return%20value;%0A%7D%0A%0A%0A/**%0A%20*%20Alias%20for%20document.getElementById.%20Found%20elements%20must%20be%20HTMLElements.%0A%20*%20@param%20%7Bstring%7D%20id%20The%20ID%20of%20the%20element%20to%20find.%0A%20*%20@return%20%7BHTMLElement%7D%20The%20found%20element%20or%20null%20if%20not%20found.%0A%20*/%0Afunction%20$(id)%20%7B%0A%20%20var%20el%20=%20document.getElementById(id);%0A%20%20return%20el%20%3F%20assertInstanceof(el,%20HTMLElement)%20%3A%20null;%0A%7D%0A%0A//%20TODO(devlin)%3A%20This%20should%20return%20SVGElement,%20but%20closure%20compiler%20is%20missing%0A//%20those%20externs.%0A/**%0A%20*%20Alias%20for%20document.getElementById.%20Found%20elements%20must%20be%20SVGElements.%0A%20*%20@param%20%7Bstring%7D%20id%20The%20ID%20of%20the%20element%20to%20find.%0A%20*%20@return%20%7BElement%7D%20The%20found%20element%20or%20null%20if%20not%20found.%0A%20*/%0Afunction%20getSVGElement(id)%20%7B%0A%20%20var%20el%20=%20document.getElementById(id);%0A%20%20return%20el%20%3F%20assertInstanceof(el,%20Element)%20%3A%20null;%0A%7D%0A%0A/**%0A%20*%20Add%20an%20accessible%20message%20to%20the%20page%20that%20will%20be%20announced%20to%0A%20*%20users%20who%20have%20spoken%20feedback%20on,%20but%20will%20be%20invisible%20to%20all%0A%20*%20other%20users.%20It's%20removed%20right%20away%20so%20it%20doesn't%20clutter%20the%20DOM.%0A%20*%20@param%20%7Bstring%7D%20msg%20The%20text%20to%20be%20pronounced.%0A%20*/%0Afunction%20announceAccessibleMessage(msg)%20%7B%0A%20%20var%20element%20=%20document.createElement('div');%0A%20%20element.setAttribute('aria-live',%20'polite');%0A%20%20element.style.position%20=%20'relative';%0A%20%20element.style.left%20=%20'-9999px';%0A%20%20element.style.height%20=%20'0px';%0A%20%20element.innerText%20=%20msg;%0A%20%20document.body.appendChild(element);%0A%20%20window.setTimeout(function()%20%7B%0A%20%20%20%20document.body.removeChild(element);%0A%20%20%7D,%200);%0A%7D%0A%0A/**%0A%20*%20Generates%20a%20CSS%20url%20string.%0A%20*%20@param%20%7Bstring%7D%20s%20The%20URL%20to%20generate%20the%20CSS%20url%20for.%0A%20*%20@return%20%7Bstring%7D%20The%20CSS%20url%20string.%0A%20*/%0Afunction%20url(s)%20%7B%0A%20%20//%20http%3A//www.w3.org/TR/css3-values/%23uris%0A%20%20//%20Parentheses,%20commas,%20whitespace%20characters,%20single%20quotes%20(')%20and%20double%0A%20%20//%20quotes%20(%22)%20appearing%20in%20a%20URI%20must%20be%20escaped%20with%20a%20backslash%0A%20%20var%20s2%20=%20s.replace(/(%5C(%7C%5C)%7C%5C,%7C%5Cs%7C%5C'%7C%5C%22%7C%5C%5C)/g,%20'%5C%5C$1');%0A%20%20//%20WebKit%20has%20a%20bug%20when%20it%20comes%20to%20URLs%20that%20end%20with%20%5C%0A%20%20//%20https%3A//bugs.webkit.org/show_bug.cgi%3Fid=28885%0A%20%20if%20(/%5C%5C%5C%5C$/.test(s2))%20%7B%0A%20%20%20%20//%20Add%20a%20space%20to%20work%20around%20the%20WebKit%20bug.%0A%20%20%20%20s2%20+=%20'%20';%0A%20%20%7D%0A%20%20return%20'url(%22'%20+%20s2%20+%20'%22)';%0A%7D%0A%0A/**%0A%20*%20Parses%20query%20parameters%20from%20Location.%0A%20*%20@param%20%7BLocation%7D%20location%20The%20URL%20to%20generate%20the%20CSS%20url%20for.%0A%20*%20@return%20%7BObject%7D%20Dictionary%20containing%20name%20value%20pairs%20for%20URL%0A%20*/%0Afunction%20parseQueryParams(location)%20%7B%0A%20%20var%20params%20=%20%7B%7D;%0A%20%20var%20query%20=%20unescape(location.search.substring(1));%0A%20%20var%20vars%20=%20query.split('&amp;');%0A%20%20for%20(var%20i%20=%200;%20i%20%3C%20vars.length;%20i++)%20%7B%0A%20%20%20%20var%20pair%20=%20vars%5Bi%5D.split('=');%0A%20%20%20%20params%5Bpair%5B0%5D%5D%20=%20pair%5B1%5D;%0A%20%20%7D%0A%20%20return%20params;%0A%7D%0A%0A/**%0A%20*%20Creates%20a%20new%20URL%20by%20appending%20or%20replacing%20the%20given%20query%20key%20and%20value.%0A%20*%20Not%20supporting%20URL%20with%20username%20and%20password.%0A%20*%20@param%20%7BLocation%7D%20location%20The%20original%20URL.%0A%20*%20@param%20%7Bstring%7D%20key%20The%20query%20parameter%20name.%0A%20*%20@param%20%7Bstring%7D%20value%20The%20query%20parameter%20value.%0A%20*%20@return%20%7Bstring%7D%20The%20constructed%20new%20URL.%0A%20*/%0Afunction%20setQueryParam(location,%20key,%20value)%20%7B%0A%20%20var%20query%20=%20parseQueryParams(location);%0A%20%20query%5BencodeURIComponent(key)%5D%20=%20encodeURIComponent(value);%0A%0A%20%20var%20newQuery%20=%20'';%0A%20%20for%20(var%20q%20in%20query)%20%7B%0A%20%20%20%20newQuery%20+=%20(newQuery%20%3F%20'&amp;'%20%3A%20'%3F')%20+%20q%20+%20'='%20+%20query%5Bq%5D;%0A%20%20%7D%0A%0A%20%20return%20location.origin%20+%20location.pathname%20+%20newQuery%20+%20location.hash;%0A%7D%0A%0A/**%0A%20*%20@param%20%7BNode%7D%20el%20A%20node%20to%20search%20for%20ancestors%20with%20%7CclassName%7C.%0A%20*%20@param%20%7Bstring%7D%20className%20A%20class%20to%20search%20for.%0A%20*%20@return%20%7BElement%7D%20A%20node%20with%20class%20of%20%7CclassName%7C%20or%20null%20if%20none%20is%20found.%0A%20*/%0Afunction%20findAncestorByClass(el,%20className)%20%7B%0A%20%20return%20/**%20@type%20%7BElement%7D%20*/(findAncestor(el,%20function(el)%20%7B%0A%20%20%20%20return%20el.classList%20&amp;&amp;%20el.classList.contains(className);%0A%20%20%7D));%0A%7D%0A%0A/**%0A%20*%20Return%20the%20first%20ancestor%20for%20which%20the%20%7B@code%20predicate%7D%20returns%20true.%0A%20*%20@param%20%7BNode%7D%20node%20The%20node%20to%20check.%0A%20*%20@param%20%7Bfunction(Node)%3Aboolean%7D%20predicate%20The%20function%20that%20tests%20the%0A%20*%20%20%20%20%20nodes.%0A%20*%20@return%20%7BNode%7D%20The%20found%20ancestor%20or%20null%20if%20not%20found.%0A%20*/%0Afunction%20findAncestor(node,%20predicate)%20%7B%0A%20%20var%20last%20=%20false;%0A%20%20while%20(node%20!=%20null%20&amp;&amp;%20!(last%20=%20predicate(node)))%20%7B%0A%20%20%20%20node%20=%20node.parentNode;%0A%20%20%7D%0A%20%20return%20last%20%3F%20node%20%3A%20null;%0A%7D%0A%0Afunction%20swapDomNodes(a,%20b)%20%7B%0A%20%20var%20afterA%20=%20a.nextSibling;%0A%20%20if%20(afterA%20==%20b)%20%7B%0A%20%20%20%20swapDomNodes(b,%20a);%0A%20%20%20%20return;%0A%20%20%7D%0A%20%20var%20aParent%20=%20a.parentNode;%0A%20%20b.parentNode.replaceChild(a,%20b);%0A%20%20aParent.insertBefore(b,%20afterA);%0A%7D%0A%0A/**%0A%20*%20Disables%20text%20selection%20and%20dragging,%20with%20optional%20whitelist%20callbacks.%0A%20*%20@param%20%7Bfunction(Event)%3Aboolean=%7D%20opt_allowSelectStart%20Unless%20this%20function%0A%20*%20%20%20%20is%20defined%20and%20returns%20true,%20the%20onselectionstart%20event%20will%20be%0A%20*%20%20%20%20surpressed.%0A%20*%20@param%20%7Bfunction(Event)%3Aboolean=%7D%20opt_allowDragStart%20Unless%20this%20function%0A%20*%20%20%20%20is%20defined%20and%20returns%20true,%20the%20ondragstart%20event%20will%20be%20surpressed.%0A%20*/%0Afunction%20disableTextSelectAndDrag(opt_allowSelectStart,%20opt_allowDragStart)%20%7B%0A%20%20//%20Disable%20text%20selection.%0A%20%20document.onselectstart%20=%20function(e)%20%7B%0A%20%20%20%20if%20(!(opt_allowSelectStart%20&amp;&amp;%20opt_allowSelectStart.call(this,%20e)))%0A%20%20%20%20%20%20e.preventDefault();%0A%20%20%7D;%0A%0A%20%20//%20Disable%20dragging.%0A%20%20document.ondragstart%20=%20function(e)%20%7B%0A%20%20%20%20if%20(!(opt_allowDragStart%20&amp;&amp;%20opt_allowDragStart.call(this,%20e)))%0A%20%20%20%20%20%20e.preventDefault();%0A%20%20%7D;%0A%7D%0A%0A/**%0A%20*%20TODO(dbeam)%3A%20DO%20NOT%20USE.%20THIS%20IS%20DEPRECATED.%20Use%20an%20action-link%20instead.%0A%20*%20Call%20this%20to%20stop%20clicks%20on%20%3Ca%20href=%22%23%22%3E%20links%20from%20scrolling%20to%20the%20top%20of%0A%20*%20the%20page%20(and%20possibly%20showing%20a%20%23%20in%20the%20link).%0A%20*/%0Afunction%20preventDefaultOnPoundLinkClicks()%20%7B%0A%20%20document.addEventListener('click',%20function(e)%20%7B%0A%20%20%20%20var%20anchor%20=%20findAncestor(/**%20@type%20%7BNode%7D%20*/(e.target),%20function(el)%20%7B%0A%20%20%20%20%20%20return%20el.tagName%20==%20'A';%0A%20%20%20%20%7D);%0A%20%20%20%20//%20Use%20getAttribute()%20to%20prevent%20URL%20normalization.%0A%20%20%20%20if%20(anchor%20&amp;&amp;%20anchor.getAttribute('href')%20==%20'%23')%0A%20%20%20%20%20%20e.preventDefault();%0A%20%20%7D);%0A%7D%0A%0A/**%0A%20*%20Check%20the%20directionality%20of%20the%20page.%0A%20*%20@return%20%7Bboolean%7D%20True%20if%20Chrome%20is%20running%20an%20RTL%20UI.%0A%20*/%0Afunction%20isRTL()%20%7B%0A%20%20return%20document.documentElement.dir%20==%20'rtl';%0A%7D%0A%0A/**%0A%20*%20Get%20an%20element%20that's%20known%20to%20exist%20by%20its%20ID.%20We%20use%20this%20instead%20of%20just%0A%20*%20calling%20getElementById%20and%20not%20checking%20the%20result%20because%20this%20lets%20us%0A%20*%20satisfy%20the%20JSCompiler%20type%20system.%0A%20*%20@param%20%7Bstring%7D%20id%20The%20identifier%20name.%0A%20*%20@return%20%7B!HTMLElement%7D%20the%20Element.%0A%20*/%0Afunction%20getRequiredElement(id)%20%7B%0A%20%20return%20assertInstanceof($(id),%20HTMLElement,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'Missing%20required%20element%3A%20'%20+%20id);%0A%7D%0A%0A/**%0A%20*%20Query%20an%20element%20that's%20known%20to%20exist%20by%20a%20selector.%20We%20use%20this%20instead%20of%0A%20*%20just%20calling%20querySelector%20and%20not%20checking%20the%20result%20because%20this%20lets%20us%0A%20*%20satisfy%20the%20JSCompiler%20type%20system.%0A%20*%20@param%20%7Bstring%7D%20selectors%20CSS%20selectors%20to%20query%20the%20element.%0A%20*%20@param%20%7B(!Document%7C!DocumentFragment%7C!Element)=%7D%20opt_context%20An%20optional%0A%20*%20%20%20%20%20context%20object%20for%20querySelector.%0A%20*%20@return%20%7B!HTMLElement%7D%20the%20Element.%0A%20*/%0Afunction%20queryRequiredElement(selectors,%20opt_context)%20%7B%0A%20%20var%20element%20=%20(opt_context%20%7C%7C%20document).querySelector(selectors);%0A%20%20return%20assertInstanceof(element,%20HTMLElement,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'Missing%20required%20element%3A%20'%20+%20selectors);%0A%7D%0A%0A//%20Handle%20click%20on%20a%20link.%20If%20the%20link%20points%20to%20a%20chrome%3A%20or%20file%3A%20url,%20then%0A//%20call%20into%20the%20browser%20to%20do%20the%20navigation.%0Adocument.addEventListener('click',%20function(e)%20%7B%0A%20%20if%20(e.defaultPrevented)%0A%20%20%20%20return;%0A%0A%20%20var%20el%20=%20e.target;%0A%20%20if%20(el.nodeType%20==%20Node.ELEMENT_NODE%20&amp;&amp;%0A%20%20%20%20%20%20el.webkitMatchesSelector('A,%20A%20*'))%20%7B%0A%20%20%20%20while%20(el.tagName%20!=%20'A')%20%7B%0A%20%20%20%20%20%20el%20=%20el.parentElement;%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20((el.protocol%20==%20'file%3A'%20%7C%7C%20el.protocol%20==%20'about%3A')%20&amp;&amp;%0A%20%20%20%20%20%20%20%20(e.button%20==%200%20%7C%7C%20e.button%20==%201))%20%7B%0A%20%20%20%20%20%20chrome.send('navigateToUrl',%20%5B%0A%20%20%20%20%20%20%20%20el.href,%0A%20%20%20%20%20%20%20%20el.target,%0A%20%20%20%20%20%20%20%20e.button,%0A%20%20%20%20%20%20%20%20e.altKey,%0A%20%20%20%20%20%20%20%20e.ctrlKey,%0A%20%20%20%20%20%20%20%20e.metaKey,%0A%20%20%20%20%20%20%20%20e.shiftKey%0A%20%20%20%20%20%20%5D);%0A%20%20%20%20%20%20e.preventDefault();%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D);%0A%0A/**%0A%20*%20Creates%20a%20new%20URL%20which%20is%20the%20old%20URL%20with%20a%20GET%20param%20of%20key=value.%0A%20*%20@param%20%7Bstring%7D%20url%20The%20base%20URL.%20There%20is%20not%20sanity%20checking%20on%20the%20URL%20so%0A%20*%20%20%20%20%20it%20must%20be%20passed%20in%20a%20proper%20format.%0A%20*%20@param%20%7Bstring%7D%20key%20The%20key%20of%20the%20param.%0A%20*%20@param%20%7Bstring%7D%20value%20The%20value%20of%20the%20param.%0A%20*%20@return%20%7Bstring%7D%20The%20new%20URL.%0A%20*/%0Afunction%20appendParam(url,%20key,%20value)%20%7B%0A%20%20var%20param%20=%20encodeURIComponent(key)%20+%20'='%20+%20encodeURIComponent(value);%0A%0A%20%20if%20(url.indexOf('%3F')%20==%20-1)%0A%20%20%20%20return%20url%20+%20'%3F'%20+%20param;%0A%20%20return%20url%20+%20'&amp;'%20+%20param;%0A%7D%0A%0A/**%0A%20*%20Creates%20an%20element%20of%20a%20specified%20type%20with%20a%20specified%20class%20name.%0A%20*%20@param%20%7Bstring%7D%20type%20The%20node%20type.%0A%20*%20@param%20%7Bstring%7D%20className%20The%20class%20name%20to%20use.%0A%20*%20@return%20%7BElement%7D%20The%20created%20element.%0A%20*/%0Afunction%20createElementWithClassName(type,%20className)%20%7B%0A%20%20var%20elm%20=%20document.createElement(type);%0A%20%20elm.className%20=%20className;%0A%20%20return%20elm;%0A%7D%0A%0A/**%0A%20*%20webkitTransitionEnd%20does%20not%20always%20fire%20(e.g.%20when%20animation%20is%20aborted%0A%20*%20or%20when%20no%20paint%20happens%20during%20the%20animation).%20This%20function%20sets%20up%0A%20*%20a%20timer%20and%20emulate%20the%20event%20if%20it%20is%20not%20fired%20when%20the%20timer%20expires.%0A%20*%20@param%20%7B!HTMLElement%7D%20el%20The%20element%20to%20watch%20for%20webkitTransitionEnd.%0A%20*%20@param%20%7Bnumber=%7D%20opt_timeOut%20The%20maximum%20wait%20time%20in%20milliseconds%20for%20the%0A%20*%20%20%20%20%20webkitTransitionEnd%20to%20happen.%20If%20not%20specified,%20it%20is%20fetched%20from%20%7Cel%7C%0A%20*%20%20%20%20%20using%20the%20transitionDuration%20style%20value.%0A%20*/%0Afunction%20ensureTransitionEndEvent(el,%20opt_timeOut)%20%7B%0A%20%20if%20(opt_timeOut%20===%20undefined)%20%7B%0A%20%20%20%20var%20style%20=%20getComputedStyle(el);%0A%20%20%20%20opt_timeOut%20=%20parseFloat(style.transitionDuration)%20*%201000;%0A%0A%20%20%20%20//%20Give%20an%20additional%2050ms%20buffer%20for%20the%20animation%20to%20complete.%0A%20%20%20%20opt_timeOut%20+=%2050;%0A%20%20%7D%0A%0A%20%20var%20fired%20=%20false;%0A%20%20el.addEventListener('webkitTransitionEnd',%20function%20f(e)%20%7B%0A%20%20%20%20el.removeEventListener('webkitTransitionEnd',%20f);%0A%20%20%20%20fired%20=%20true;%0A%20%20%7D);%0A%20%20window.setTimeout(function()%20%7B%0A%20%20%20%20if%20(!fired)%0A%20%20%20%20%20%20cr.dispatchSimpleEvent(el,%20'webkitTransitionEnd',%20true);%0A%20%20%7D,%20opt_timeOut);%0A%7D%0A%0A/**%0A%20*%20Alias%20for%20document.scrollTop%20getter.%0A%20*%20@param%20%7B!HTMLDocument%7D%20doc%20The%20document%20node%20where%20information%20will%20be%0A%20*%20%20%20%20%20queried%20from.%0A%20*%20@return%20%7Bnumber%7D%20The%20Y%20document%20scroll%20offset.%0A%20*/%0Afunction%20scrollTopForDocument(doc)%20%7B%0A%20%20return%20doc.documentElement.scrollTop%20%7C%7C%20doc.body.scrollTop;%0A%7D%0A%0A/**%0A%20*%20Alias%20for%20document.scrollTop%20setter.%0A%20*%20@param%20%7B!HTMLDocument%7D%20doc%20The%20document%20node%20where%20information%20will%20be%0A%20*%20%20%20%20%20queried%20from.%0A%20*%20@param%20%7Bnumber%7D%20value%20The%20target%20Y%20scroll%20offset.%0A%20*/%0Afunction%20setScrollTopForDocument(doc,%20value)%20%7B%0A%20%20doc.documentElement.scrollTop%20=%20doc.body.scrollTop%20=%20value;%0A%7D%0A%0A/**%0A%20*%20Alias%20for%20document.scrollLeft%20getter.%0A%20*%20@param%20%7B!HTMLDocument%7D%20doc%20The%20document%20node%20where%20information%20will%20be%0A%20*%20%20%20%20%20queried%20from.%0A%20*%20@return%20%7Bnumber%7D%20The%20X%20document%20scroll%20offset.%0A%20*/%0Afunction%20scrollLeftForDocument(doc)%20%7B%0A%20%20return%20doc.documentElement.scrollLeft%20%7C%7C%20doc.body.scrollLeft;%0A%7D%0A%0A/**%0A%20*%20Alias%20for%20document.scrollLeft%20setter.%0A%20*%20@param%20%7B!HTMLDocument%7D%20doc%20The%20document%20node%20where%20information%20will%20be%0A%20*%20%20%20%20%20queried%20from.%0A%20*%20@param%20%7Bnumber%7D%20value%20The%20target%20X%20scroll%20offset.%0A%20*/%0Afunction%20setScrollLeftForDocument(doc,%20value)%20%7B%0A%20%20doc.documentElement.scrollLeft%20=%20doc.body.scrollLeft%20=%20value;%0A%7D%0A%0A/**%0A%20*%20Replaces%20'&amp;',%20'%3C',%20'%3E',%20'%22',%20and%20'''%20characters%20with%20their%20HTML%20encoding.%0A%20*%20@param%20%7Bstring%7D%20original%20The%20original%20string.%0A%20*%20@return%20%7Bstring%7D%20The%20string%20with%20all%20the%20characters%20mentioned%20above%20replaced.%0A%20*/%0Afunction%20HTMLEscape(original)%20%7B%0A%20%20return%20original.replace(/&amp;/g,%20'&amp;amp;')%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.replace(/%3C/g,%20'&amp;lt;')%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.replace(/%3E/g,%20'&amp;gt;')%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.replace(/%22/g,%20'&amp;quot;')%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.replace(/'/g,%20'&amp;%2339;');%0A%7D%0A%0A/**%0A%20*%20Shortens%20the%20provided%20string%20(if%20necessary)%20to%20a%20string%20of%20length%20at%20most%0A%20*%20%7CmaxLength%7C.%0A%20*%20@param%20%7Bstring%7D%20original%20The%20original%20string.%0A%20*%20@param%20%7Bnumber%7D%20maxLength%20The%20maximum%20length%20allowed%20for%20the%20string.%0A%20*%20@return%20%7Bstring%7D%20The%20original%20string%20if%20its%20length%20does%20not%20exceed%0A%20*%20%20%20%20%20%7CmaxLength%7C.%20Otherwise%20the%20first%20%7CmaxLength%7C%20-%201%20characters%20with%20'...'%0A%20*%20%20%20%20%20appended.%0A%20*/%0Afunction%20elide(original,%20maxLength)%20%7B%0A%20%20if%20(original.length%20%3C=%20maxLength)%0A%20%20%20%20return%20original;%0A%20%20return%20original.substring(0,%20maxLength%20-%201)%20+%20'%5Cu2026';%0A%7D%0A%0A/**%0A%20*%20Quote%20a%20string%20so%20it%20can%20be%20used%20in%20a%20regular%20expression.%0A%20*%20@param%20%7Bstring%7D%20str%20The%20source%20string.%0A%20*%20@return%20%7Bstring%7D%20The%20escaped%20string.%0A%20*/%0Afunction%20quoteString(str)%20%7B%0A%20%20return%20str.replace(/(%5B%5C%5C%5C.%5C+%5C*%5C%3F%5C%5B%5C%5E%5C%5D%5C$%5C(%5C)%5C%7B%5C%7D%5C=%5C!%5C%3C%5C%3E%5C%7C%5C%3A%5D)/g,%20'%5C%5C$1');%0A%7D%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202014%20The%20Chromium%20Authors.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0Avar%20CAPTIVEPORTAL_CMD_OPEN_LOGIN_PAGE%20=%20'openLoginPage';%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202014%20The%20Chromium%20Authors.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0Afunction%20setupSSLDebuggingInfo()%20%7B%0A%20%20if%20(loadTimeData.getString('type')%20!=%20'SSL')%0A%20%20%20%20return;%0A%0A%20%20//%20The%20titles%20are%20not%20internationalized%20because%20this%20is%20debugging%20information%0A%20%20//%20for%20bug%20reports,%20help%20center%20posts,%20etc.%0A%20%20appendDebuggingField('Subject',%20loadTimeData.getString('subject'));%0A%20%20appendDebuggingField('Issuer',%20loadTimeData.getString('issuer'));%0A%20%20appendDebuggingField('Expires%20on',%20loadTimeData.getString('expirationDate'));%0A%20%20appendDebuggingField('Current%20date',%20loadTimeData.getString('currentDate'));%0A%20%20appendDebuggingField('PEM%20encoded%20chain',%20loadTimeData.getString('pem'));%0A%0A%20%20$('error-code').addEventListener('click',%20toggleDebuggingInfo);%0A%7D%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202015%20The%20Chromium%20Authors.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A'use%20strict';%0A%0A//%20Other%20constants%20defined%20in%20security_interstitial_page.h.%0Avar%20SB_BOX_CHECKED%20=%20'boxchecked';%0Avar%20SB_DISPLAY_CHECK_BOX%20=%20'displaycheckbox';%0A%0A//%20This%20sets%20up%20the%20Extended%20Safe%20Browsing%20Reporting%20opt-in,%20either%20for%0A//%20reporting%20malware%20or%20invalid%20certificate%20chains.%20Does%20nothing%20if%20the%0A//%20interstitial%20type%20is%20not%20SAFEBROWSING%20or%20SSL%20or%20CAPTIVE_PORTAL.%0Afunction%20setupExtendedReportingCheckbox()%20%7B%0A%20%20var%20interstitialType%20=%20loadTimeData.getString('type');%0A%20%20if%20(interstitialType%20!=%20'SAFEBROWSING'%20&amp;&amp;%20interstitialType%20!=%20'SSL'%20&amp;&amp;%0A%20%20%20%20%20%20interstitialType%20!=%20'CAPTIVE_PORTAL')%20%7B%0A%20%20%20%20return;%0A%20%20%7D%0A%0A%20%20if%20(!loadTimeData.getBoolean(SB_DISPLAY_CHECK_BOX))%20%7B%0A%20%20%20%20return;%0A%20%20%7D%0A%0A%20%20$('opt-in-label').innerHTML%20=%20loadTimeData.getString('optInLink');%0A%20%20$('opt-in-checkbox').checked%20=%20loadTimeData.getBoolean(SB_BOX_CHECKED);%0A%20%20$('extended-reporting-opt-in').classList.remove('hidden');%0A%0A%20%20var%20className%20=%20interstitialType%20==%20'SAFEBROWSING'%20%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'safe-browsing-opt-in'%20%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'ssl-opt-in';%0A%20%20$('extended-reporting-opt-in').classList.add(className);%0A%0A%20%20$('body').classList.add('extended-reporting-has-checkbox');%0A%0A%20%20$('opt-in-checkbox').addEventListener('click',%20function()%20%7B%0A%20%20%20%20sendCommand($('opt-in-checkbox').checked%20%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CMD_DO_REPORT%20%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CMD_DONT_REPORT);%0A%20%20%7D);%0A%7D%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202015%20The%20Chromium%20Authors.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0Avar%20mobileNav%20=%20false;%0A%0A/**%0A%20*%20For%20small%20screen%20mobile%20the%20navigation%20buttons%20are%20moved%0A%20*%20below%20the%20advanced%20text.%0A%20*/%0Afunction%20onResize()%20%7B%0A%20%20var%20helpOuterBox%20=%20document.querySelector('%23details');%0A%20%20var%20mainContent%20=%20document.querySelector('%23main-content');%0A%20%20var%20mediaQuery%20=%20'(min-width%3A%20240px)%20and%20(max-width%3A%20420px)%20and%20'%20+%0A%20%20%20%20%20%20'(max-height%3A%20736px)%20and%20(min-height%3A%20401px)%20and%20'%20+%0A%20%20%20%20%20%20'(orientation%3A%20portrait),%20(max-width%3A%20736px)%20and%20'%20+%0A%20%20%20%20%20%20'(max-height%3A%20420px)%20and%20(min-height%3A%20240px)%20and%20'%20+%0A%20%20%20%20%20%20'(min-width%3A%20421px)%20and%20(orientation%3A%20landscape)';%0A%0A%20%20var%20detailsHidden%20=%20helpOuterBox.classList.contains('hidden');%0A%20%20var%20runnerContainer%20=%20document.querySelector('.runner-container');%0A%0A%20%20//%20Check%20for%20change%20in%20nav%20status.%0A%20%20if%20(mobileNav%20!=%20window.matchMedia(mediaQuery).matches)%20%7B%0A%20%20%20%20mobileNav%20=%20!mobileNav;%0A%0A%20%20%20%20//%20Handle%20showing%20the%20top%20content%20/%20details%20sections%20according%20to%20state.%0A%20%20%20%20if%20(mobileNav)%20%7B%0A%20%20%20%20%20%20mainContent.classList.toggle('hidden',%20!detailsHidden);%0A%20%20%20%20%20%20helpOuterBox.classList.toggle('hidden',%20detailsHidden);%0A%20%20%20%20%20%20if%20(runnerContainer)%20%7B%0A%20%20%20%20%20%20%20%20runnerContainer.classList.toggle('hidden',%20!detailsHidden);%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20else%20if%20(!detailsHidden)%20%7B%0A%20%20%20%20%20%20//%20Non%20mobile%20nav%20with%20visible%20details.%0A%20%20%20%20%20%20mainContent.classList.remove('hidden');%0A%20%20%20%20%20%20helpOuterBox.classList.remove('hidden');%0A%20%20%20%20%20%20if%20(runnerContainer)%20%7B%0A%20%20%20%20%20%20%20%20runnerContainer.classList.remove('hidden');%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A%0Afunction%20setupMobileNav()%20%7B%0A%20%20window.addEventListener('resize',%20onResize);%0A%20%20onResize();%0A%7D%0A%0Adocument.addEventListener('DOMContentLoaded',%20setupMobileNav);%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202014%20The%20Chromium%20Authors.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A//%20This%20is%20the%20shared%20code%20for%20the%20new%20(Chrome%2037)%20security%20interstitials.%20It%20is%0A//%20used%20for%20both%20SSL%20interstitials%20and%20Safe%20Browsing%20interstitials.%0A%0Avar%20expandedDetails%20=%20false;%0Avar%20keyPressState%20=%200;%0A%0A//%20Should%20match%20SecurityInterstitialCommands%20in%20security_interstitial_page.h%0Avar%20CMD_DONT_PROCEED%20=%200;%0Avar%20CMD_PROCEED%20=%201;%0A//%20Ways%20for%20user%20to%20get%20more%20information%0Avar%20CMD_SHOW_MORE_SECTION%20=%202;%0Avar%20CMD_OPEN_HELP_CENTER%20=%203;%0Avar%20CMD_OPEN_DIAGNOSTIC%20=%204;%0A//%20Primary%20button%20actions%0Avar%20CMD_RELOAD%20=%205;%0Avar%20CMD_OPEN_DATE_SETTINGS%20=%206;%0Avar%20CMD_OPEN_LOGIN%20=%207;%0A//%20Safe%20Browsing%20Extended%20Reporting%0Avar%20CMD_DO_REPORT%20=%208;%0Avar%20CMD_DONT_REPORT%20=%209;%0Avar%20CMD_OPEN_REPORTING_PRIVACY%20=%2010;%0A//%20Report%20a%20phishing%20error.%0Avar%20CMD_REPORT_PHISHING_ERROR%20=%2011;%0A%0A/**%0A%20*%20A%20convenience%20method%20for%20sending%20commands%20to%20the%20parent%20page.%0A%20*%20@param%20%7Bstring%7D%20cmd%20%20The%20command%20to%20send.%0A%20*/%0Afunction%20sendCommand(cmd)%20%7B%0Awindow.domAutomationController.setAutomationId(1);%0A%20%20window.domAutomationController.send(cmd);%0A%0A%7D%0A%0A/**%0A%20*%20This%20allows%20errors%20to%20be%20skippped%20by%20typing%20a%20secret%20phrase%20into%20the%20page.%0A%20*%20@param%20%7Bstring%7D%20e%20The%20key%20that%20was%20just%20pressed.%0A%20*/%0Afunction%20handleKeypress(e)%20%7B%0A%20%20var%20BYPASS_SEQUENCE%20=%20'badidea';%0A%20%20if%20(BYPASS_SEQUENCE.charCodeAt(keyPressState)%20==%20e.keyCode)%20%7B%0A%20%20%20%20keyPressState++;%0A%20%20%20%20if%20(keyPressState%20==%20BYPASS_SEQUENCE.length)%20%7B%0A%20%20%20%20%20%20sendCommand(CMD_PROCEED);%0A%20%20%20%20%20%20keyPressState%20=%200;%0A%20%20%20%20%7D%0A%20%20%7D%20else%20%7B%0A%20%20%20%20keyPressState%20=%200;%0A%20%20%7D%0A%7D%0A%0A/**%0A%20*%20This%20appends%20a%20piece%20of%20debugging%20information%20to%20the%20end%20of%20the%20warning.%0A%20*%20When%20complete,%20the%20caller%20must%20also%20make%20the%20debugging%20div%0A%20*%20(error-debugging-info)%20visible.%0A%20*%20@param%20%7Bstring%7D%20title%20%20The%20name%20of%20this%20debugging%20field.%0A%20*%20@param%20%7Bstring%7D%20value%20%20The%20value%20of%20the%20debugging%20field.%0A%20*/%0Afunction%20appendDebuggingField(title,%20value)%20%7B%0A%20%20//%20The%20values%20input%20here%20are%20not%20trusted.%20Never%20use%20innerHTML%20on%20these%0A%20%20//%20values!%0A%20%20var%20spanTitle%20=%20document.createElement('span');%0A%20%20spanTitle.classList.add('debugging-title');%0A%20%20spanTitle.innerText%20=%20title%20+%20'%3A%20';%0A%0A%20%20var%20spanValue%20=%20document.createElement('span');%0A%20%20spanValue.classList.add('debugging-value');%0A%20%20spanValue.innerText%20=%20value;%0A%0A%20%20var%20pElem%20=%20document.createElement('p');%0A%20%20pElem.classList.add('debugging-content');%0A%20%20pElem.appendChild(spanTitle);%0A%20%20pElem.appendChild(spanValue);%0A%20%20$('error-debugging-info').appendChild(pElem);%0A%7D%0A%0Afunction%20toggleDebuggingInfo()%20%7B%0A%20%20$('error-debugging-info').classList.toggle('hidden');%0A%7D%0A%0Afunction%20setupEvents()%20%7B%0A%20%20var%20overridable%20=%20loadTimeData.getBoolean('overridable');%0A%20%20var%20interstitialType%20=%20loadTimeData.getString('type');%0A%20%20var%20ssl%20=%20interstitialType%20==%20'SSL';%0A%20%20var%20captivePortal%20=%20interstitialType%20==%20'CAPTIVE_PORTAL';%0A%20%20var%20badClock%20=%20ssl%20&amp;&amp;%20loadTimeData.getBoolean('bad_clock');%0A%20%20var%20hidePrimaryButton%20=%20badClock%20&amp;&amp;%20loadTimeData.getBoolean(%0A%20%20%20%20%20%20'hide_primary_button');%0A%0A%20%20if%20(ssl)%20%7B%0A%20%20%20%20$('body').classList.add(badClock%20%3F%20'bad-clock'%20%3A%20'ssl');%0A%20%20%20%20$('error-code').textContent%20=%20loadTimeData.getString('errorCode');%0A%20%20%20%20$('error-code').classList.remove('hidden');%0A%20%20%7D%20else%20if%20(captivePortal)%20%7B%0A%20%20%20%20$('body').classList.add('captive-portal');%0A%20%20%7D%20else%20%7B%0A%20%20%20%20$('body').classList.add('safe-browsing');%0A%20%20%7D%0A%0A%20%20if%20(hidePrimaryButton)%20%7B%0A%20%20%20%20$('primary-button').classList.add('hidden');%0A%20%20%7D%20else%20%7B%0A%20%20%20%20$('primary-button').addEventListener('click',%20function()%20%7B%0A%20%20%20%20%20%20switch%20(interstitialType)%20%7B%0A%20%20%20%20%20%20%20%20case%20'CAPTIVE_PORTAL'%3A%0A%20%20%20%20%20%20%20%20%20%20sendCommand(CMD_OPEN_LOGIN);%0A%20%20%20%20%20%20%20%20%20%20break;%0A%0A%20%20%20%20%20%20%20%20case%20'SSL'%3A%0A%20%20%20%20%20%20%20%20%20%20if%20(badClock)%0A%20%20%20%20%20%20%20%20%20%20%20%20sendCommand(CMD_OPEN_DATE_SETTINGS);%0A%20%20%20%20%20%20%20%20%20%20else%20if%20(overridable)%0A%20%20%20%20%20%20%20%20%20%20%20%20sendCommand(CMD_DONT_PROCEED);%0A%20%20%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20sendCommand(CMD_RELOAD);%0A%20%20%20%20%20%20%20%20%20%20break;%0A%0A%20%20%20%20%20%20%20%20case%20'SAFEBROWSING'%3A%0A%20%20%20%20%20%20%20%20%20%20sendCommand(CMD_DONT_PROCEED);%0A%20%20%20%20%20%20%20%20%20%20break;%0A%0A%20%20%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20%20%20throw%20'Invalid%20interstitial%20type';%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D);%0A%20%20%7D%0A%0A%20%20if%20(overridable)%20%7B%0A%20%20%20%20//%20Captive%20portal%20page%20isn't%20overridable.%0A%20%20%20%20$('proceed-link').addEventListener('click',%20function(event)%20%7B%0A%20%20%20%20%20%20sendCommand(CMD_PROCEED);%0A%20%20%20%20%7D);%0A%20%20%7D%20else%20if%20(!ssl)%20%7B%0A%20%20%20%20$('final-paragraph').classList.add('hidden');%0A%20%20%7D%0A%0A%20%20if%20(ssl%20&amp;&amp;%20overridable)%20%7B%0A%20%20%20%20$('proceed-link').classList.add('small-link');%0A%20%20%7D%20else%20if%20($('help-link'))%20%7B%0A%20%20%20%20//%20Overridable%20SSL%20page%20doesn't%20have%20this%20link.%0A%20%20%20%20$('help-link').addEventListener('click',%20function(event)%20%7B%0A%20%20%20%20%20%20if%20(ssl%20%7C%7C%20loadTimeData.getBoolean('phishing'))%0A%20%20%20%20%20%20%20%20sendCommand(CMD_OPEN_HELP_CENTER);%0A%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20sendCommand(CMD_OPEN_DIAGNOSTIC);%0A%20%20%20%20%7D);%0A%20%20%7D%0A%0A%20%20if%20(captivePortal)%20%7B%0A%20%20%20%20//%20Captive%20portal%20page%20doesn't%20have%20details%20button.%0A%20%20%20%20$('details-button').classList.add('hidden');%0A%20%20%7D%20else%20%7B%0A%20%20%20%20$('details-button').addEventListener('click',%20function(event)%20%7B%0A%20%20%20%20%20%20var%20hiddenDetails%20=%20$('details').classList.toggle('hidden');%0A%0A%20%20%20%20%20%20if%20(mobileNav)%20%7B%0A%20%20%20%20%20%20%20%20//%20Details%20appear%20over%20the%20main%20content%20on%20small%20screens.%0A%20%20%20%20%20%20%20%20$('main-content').classList.toggle('hidden',%20!hiddenDetails);%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20$('main-content').classList.remove('hidden');%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20$('details-button').innerText%20=%20hiddenDetails%20%3F%0A%20%20%20%20%20%20%20%20%20%20loadTimeData.getString('openDetails')%20%3A%0A%20%20%20%20%20%20%20%20%20%20loadTimeData.getString('closeDetails');%0A%20%20%20%20%20%20if%20(!expandedDetails)%20%7B%0A%20%20%20%20%20%20%20%20//%20Record%20a%20histogram%20entry%20only%20the%20first%20time%20that%20details%20is%20opened.%0A%20%20%20%20%20%20%20%20sendCommand(CMD_SHOW_MORE_SECTION);%0A%20%20%20%20%20%20%20%20expandedDetails%20=%20true;%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D);%0A%20%20%7D%0A%0A%20%20//%20TODO(felt)%3A%20This%20should%20be%20simplified%20once%20the%20Finch%20trial%20is%20no%20longer%0A%20%20//%20needed.%0A%20%20if%20(interstitialType%20==%20'SAFEBROWSING'%20&amp;&amp;%0A%20%20%20%20%20%20loadTimeData.getBoolean('phishing')%20&amp;&amp;%20$('report-error-link'))%20%7B%0A%20%20%20%20$('report-error-link').addEventListener('click',%20function(event)%20%7B%0A%20%20%20%20%20%20sendCommand(CMD_REPORT_PHISHING_ERROR);%0A%20%20%20%20%7D);%0A%20%20%7D%0A%0A%20%20preventDefaultOnPoundLinkClicks();%0A%20%20setupExtendedReportingCheckbox();%0A%20%20setupSSLDebuggingInfo();%0A%20%20document.addEventListener('keypress',%20handleKeypress);%0A%7D%0A%0Adocument.addEventListener('DOMContentLoaded',%20setupEvents);%0A%3C/script%3E%0A%3C/head%3E%0A%3Cbody%20id=%22body%22%3E%0A%20%20%3Cdiv%20class=%22interstitial-wrapper%22%3E%0A%20%20%20%20%3Cdiv%20id=%22main-content%22%3E%0A%20%20%20%20%20%20%3Cdiv%20class=%22icon%22%20id=%22icon%22%3E%3C/div%3E%0A%20%20%20%20%20%20%3Cdiv%20id=%22main-message%22%3E%0A%20%20%20%20%20%20%20%20%3Ch1%20i18n-content=%22heading%22%3E%3C/h1%3E%0A%20%20%20%20%20%20%20%20%3Cp%20i18n-values=%22.innerHTML%3AprimaryParagraph%22%3E%3C/p%3E%0A%20%20%20%20%20%20%20%20%3Cdiv%20id=%22debugging%22%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20id=%22error-code%22%20class=%22error-code%22%3E%3C/div%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20id=%22error-debugging-info%22%20class=%22hidden%22%3E%3C/div%3E%0A%20%20%20%20%20%20%20%20%3C/div%3E%0A%20%20%20%20%20%20%3C/div%3E%0A%20%20%20%20%20%20%3Cdiv%20id=%22extended-reporting-opt-in%22%20class=%22hidden%22%3E%0A%20%20%20%20%20%20%20%20%3Clabel%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cinput%20type=%22checkbox%22%20id=%22opt-in-checkbox%22%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cspan%20class=%22checkbox%22%3E%3C/span%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cspan%20id=%22opt-in-label%22%3E%3C/span%3E%0A%20%20%20%20%20%20%20%20%3C/label%3E%0A%20%20%20%20%20%20%3C/div%3E%0A%20%20%20%20%3C/div%3E%0A%20%20%20%20%3Cdiv%20class=%22nav-wrapper%22%3E%0A%20%20%20%20%20%20%3Cbutton%20i18n-content=%22primaryButtonText%22%20id=%22primary-button%22%3E%3C/button%3E%0A%20%20%20%20%20%20%3Cbutton%20id=%22details-button%22%20class=%22small-link%22%0A%20%20%20%20%20%20%20%20%20%20i18n-content=%22openDetails%22%3E%3C/button%3E%0A%20%20%20%20%3C/div%3E%0A%20%20%20%20%3Cdiv%20id=%22details%22%20class=%22hidden%22%3E%0A%20%20%20%20%20%20%3Cp%20i18n-values=%22.innerHTML%3AexplanationParagraph%22%3E%3C/p%3E%0A%20%20%20%20%20%20%3Cp%20i18n-values=%22.innerHTML%3AfinalParagraph%22%20id=%22final-paragraph%22%3E%3C/p%3E%0A%20%20%20%20%3C/div%3E%0A%20%20%3C/div%3E%0A%3C/body%3E%0A%3C/html%3E%0A%3Cstyle%3E/*%20Copyright%202014%20The%20Chromium%20Authors.%20All%20rights%20reserved.%0A%20*%20Use%20of%20this%20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A%20*%20found%20in%20the%20LICENSE%20file.%20*/%0A%0A/*%20This%20file%20is%20dynamically%20processed%20by%20a%20C++%20data%20source%20handler%20to%20fill%20in%0A%20*%20some%20per-platform/locale%20styles%20that%20dramatically%20alter%20the%20page.%20This%20is%0A%20*%20done%20to%20reduce%20flicker,%20as%20JS%20may%20not%20run%20before%20the%20page%20is%20rendered.%0A%20*%0A%20*%20There%20are%20two%20ways%20to%20include%20this%20stylesheet%3A%0A%20*%201.%20via%20its%20chrome%3A//resources/%20URL%20in%20HTML,%20i.e.%3A%0A%20*%0A%20*%20%20%20%3Clink%20rel=%22stylesheet%22%20href=%22chrome%3A//resources/css/text_defaults.css%22%3E%0A%20*%0A%20*%202.%20via%20the%20webui%3A%3AAppendWebUICSSTextDefaults()%20method%20to%20directly%20append%20it%0A%20*%20to%20an%20HTML%20string.%0A%20*%20Otherwise%20its%20placeholders%20won't%20be%20expanded.%20*/%0A%0Ahtml%20%7B%0A%20%20direction%3A%20ltr;%0A%7D%0A%0Abody%20%7B%0A%20%20font-family%3A%20'Segoe%20UI',Arial,'Microsoft%20Yahei',sans-serif;%0A%20%20font-size%3A%2075%25;%0A%7D%0A%0Abutton%20%7B%0A%20%20font-family%3A%20'Segoe%20UI',Arial,'Microsoft%20Yahei',sans-serif;%0A%7D%0A%3C/style%3E%3Cscript%3E//%20Copyright%20(c)%202012%20The%20Chromium%20Authors.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A/**%0A%20*%20@fileoverview%20This%20file%20defines%20a%20singleton%20which%20provides%20access%20to%20all%20data%0A%20*%20that%20is%20available%20as%20soon%20as%20the%20page's%20resources%20are%20loaded%20(before%20DOM%0A%20*%20content%20has%20finished%20loading).%20This%20data%20includes%20both%20localized%20strings%20and%0A%20*%20any%20data%20that%20is%20important%20to%20have%20ready%20from%20a%20very%20early%20stage%20(e.g.%20things%0A%20*%20that%20must%20be%20displayed%20right%20away).%0A%20*/%0A%0A/**%20@type%20%7B!LoadTimeData%7D%20*/%20var%20loadTimeData;%0A%0A//%20Expose%20this%20type%20globally%20as%20a%20temporary%20work%20around%20until%0A//%20https%3A//github.com/google/closure-compiler/issues/544%20is%20fixed.%0A/**%20@constructor%20*/%0Afunction%20LoadTimeData()%20%7B%7D%0A%0A(function()%20%7B%0A%20%20'use%20strict';%0A%0A%20%20LoadTimeData.prototype%20=%20%7B%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Sets%20the%20backing%20object.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%20that%20there%20is%20no%20getter%20for%20%7Cdata_%7C%20to%20discourage%20abuse%20of%20the%20form%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20var%20value%20=%20loadTimeData.data()%5B'key'%5D;%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20@param%20%7BObject%7D%20value%20The%20de-serialized%20page%20data.%0A%20%20%20%20%20*/%0A%20%20%20%20set%20data(value)%20%7B%0A%20%20%20%20%20%20expect(!this.data_,%20'Re-setting%20data.');%0A%20%20%20%20%20%20this.data_%20=%20value;%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Returns%20a%20JsEvalContext%20for%20%7Cdata_%7C.%0A%20%20%20%20%20*%20@returns%20%7BJsEvalContext%7D%0A%20%20%20%20%20*/%0A%20%20%20%20createJsEvalContext%3A%20function()%20%7B%0A%20%20%20%20%20%20return%20new%20JsEvalContext(this.data_);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20id%20An%20ID%20of%20a%20value%20that%20might%20exist.%0A%20%20%20%20%20*%20@return%20%7Bboolean%7D%20True%20if%20%7Cid%7C%20is%20a%20key%20in%20the%20dictionary.%0A%20%20%20%20%20*/%0A%20%20%20%20valueExists%3A%20function(id)%20%7B%0A%20%20%20%20%20%20return%20id%20in%20this.data_;%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Fetches%20a%20value,%20expecting%20that%20it%20exists.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20id%20The%20key%20that%20identifies%20the%20desired%20value.%0A%20%20%20%20%20*%20@return%20%7B*%7D%20The%20corresponding%20value.%0A%20%20%20%20%20*/%0A%20%20%20%20getValue%3A%20function(id)%20%7B%0A%20%20%20%20%20%20expect(this.data_,%20'No%20data.%20Did%20you%20remember%20to%20include%20strings.js%3F');%0A%20%20%20%20%20%20var%20value%20=%20this.data_%5Bid%5D;%0A%20%20%20%20%20%20expect(typeof%20value%20!=%20'undefined',%20'Could%20not%20find%20value%20for%20'%20+%20id);%0A%20%20%20%20%20%20return%20value;%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20As%20above,%20but%20also%20makes%20sure%20that%20the%20value%20is%20a%20string.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20id%20The%20key%20that%20identifies%20the%20desired%20string.%0A%20%20%20%20%20*%20@return%20%7Bstring%7D%20The%20corresponding%20string%20value.%0A%20%20%20%20%20*/%0A%20%20%20%20getString%3A%20function(id)%20%7B%0A%20%20%20%20%20%20var%20value%20=%20this.getValue(id);%0A%20%20%20%20%20%20expectIsType(id,%20value,%20'string');%0A%20%20%20%20%20%20return%20/**%20@type%20%7Bstring%7D%20*/%20(value);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Returns%20a%20formatted%20localized%20string%20where%20$1%20to%20$9%20are%20replaced%20by%20the%0A%20%20%20%20%20*%20second%20to%20the%20tenth%20argument.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20id%20The%20ID%20of%20the%20string%20we%20want.%0A%20%20%20%20%20*%20@param%20%7B...(string%7Cnumber)%7D%20var_args%20The%20extra%20values%20to%20include%20in%20the%0A%20%20%20%20%20*%20%20%20%20%20formatted%20output.%0A%20%20%20%20%20*%20@return%20%7Bstring%7D%20The%20formatted%20string.%0A%20%20%20%20%20*/%0A%20%20%20%20getStringF%3A%20function(id,%20var_args)%20%7B%0A%20%20%20%20%20%20var%20value%20=%20this.getString(id);%0A%20%20%20%20%20%20if%20(!value)%0A%20%20%20%20%20%20%20%20return%20'';%0A%0A%20%20%20%20%20%20var%20varArgs%20=%20arguments;%0A%20%20%20%20%20%20return%20value.replace(/%5C$%5B$1-9%5D/g,%20function(m)%20%7B%0A%20%20%20%20%20%20%20%20return%20m%20==%20'$$'%20%3F%20'$'%20%3A%20varArgs%5Bm%5B1%5D%5D;%0A%20%20%20%20%20%20%7D);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20As%20above,%20but%20also%20makes%20sure%20that%20the%20value%20is%20a%20boolean.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20id%20The%20key%20that%20identifies%20the%20desired%20boolean.%0A%20%20%20%20%20*%20@return%20%7Bboolean%7D%20The%20corresponding%20boolean%20value.%0A%20%20%20%20%20*/%0A%20%20%20%20getBoolean%3A%20function(id)%20%7B%0A%20%20%20%20%20%20var%20value%20=%20this.getValue(id);%0A%20%20%20%20%20%20expectIsType(id,%20value,%20'boolean');%0A%20%20%20%20%20%20return%20/**%20@type%20%7Bboolean%7D%20*/%20(value);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20As%20above,%20but%20also%20makes%20sure%20that%20the%20value%20is%20an%20integer.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20id%20The%20key%20that%20identifies%20the%20desired%20number.%0A%20%20%20%20%20*%20@return%20%7Bnumber%7D%20The%20corresponding%20number%20value.%0A%20%20%20%20%20*/%0A%20%20%20%20getInteger%3A%20function(id)%20%7B%0A%20%20%20%20%20%20var%20value%20=%20this.getValue(id);%0A%20%20%20%20%20%20expectIsType(id,%20value,%20'number');%0A%20%20%20%20%20%20expect(value%20==%20Math.floor(value),%20'Number%20isn%5C't%20integer%3A%20'%20+%20value);%0A%20%20%20%20%20%20return%20/**%20@type%20%7Bnumber%7D%20*/%20(value);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Override%20values%20in%20loadTimeData%20with%20the%20values%20found%20in%20%7Creplacements%7C.%0A%20%20%20%20%20*%20@param%20%7BObject%7D%20replacements%20The%20dictionary%20object%20of%20keys%20to%20replace.%0A%20%20%20%20%20*/%0A%20%20%20%20overrideValues%3A%20function(replacements)%20%7B%0A%20%20%20%20%20%20expect(typeof%20replacements%20==%20'object',%0A%20%20%20%20%20%20%20%20%20%20%20%20%20'Replacements%20must%20be%20a%20dictionary%20object.');%0A%20%20%20%20%20%20for%20(var%20key%20in%20replacements)%20%7B%0A%20%20%20%20%20%20%20%20this.data_%5Bkey%5D%20=%20replacements%5Bkey%5D;%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D;%0A%0A%20%20/**%0A%20%20%20*%20Checks%20condition,%20displays%20error%20message%20if%20expectation%20fails.%0A%20%20%20*%20@param%20%7B*%7D%20condition%20The%20condition%20to%20check%20for%20truthiness.%0A%20%20%20*%20@param%20%7Bstring%7D%20message%20The%20message%20to%20display%20if%20the%20check%20fails.%0A%20%20%20*/%0A%20%20function%20expect(condition,%20message)%20%7B%0A%20%20%20%20if%20(!condition)%20%7B%0A%20%20%20%20%20%20console.error('Unexpected%20condition%20on%20'%20+%20document.location.href%20+%20'%3A%20'%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20message);%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20/**%0A%20%20%20*%20Checks%20that%20the%20given%20value%20has%20the%20given%20type.%0A%20%20%20*%20@param%20%7Bstring%7D%20id%20The%20id%20of%20the%20value%20(only%20used%20for%20error%20message).%0A%20%20%20*%20@param%20%7B*%7D%20value%20The%20value%20to%20check%20the%20type%20on.%0A%20%20%20*%20@param%20%7Bstring%7D%20type%20The%20type%20we%20expect%20%7Cvalue%7C%20to%20be.%0A%20%20%20*/%0A%20%20function%20expectIsType(id,%20value,%20type)%20%7B%0A%20%20%20%20expect(typeof%20value%20==%20type,%20'%5B'%20+%20value%20+%20'%5D%20('%20+%20id%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20')%20is%20not%20a%20'%20+%20type);%0A%20%20%7D%0A%0A%20%20expect(!loadTimeData,%20'should%20only%20include%20this%20file%20once');%0A%20%20loadTimeData%20=%20new%20LoadTimeData;%0A%7D)();%0A%3C/script%3E%3Cscript%3EloadTimeData.data%20=%20%7B%22bad_clock%22%3Afalse,%22boxchecked%22%3Afalse,%22closeDetails%22%3A%22%E9%9A%90%E8%97%8F%E8%AF%A6%E6%83%85%22,%22currentDate%22%3A%222016%E5%B9%B411%E6%9C%8817%E6%97%A5%22,%22displaycheckbox%22%3Atrue,%22errorCode%22%3A%22net%3A%3AERR_CERTIFICATE_TRANSPARENCY_REQUIRED%22,%22errorType%22%3A15,%22expirationDate%22%3A%222017%E5%B9%B48%E6%9C%8817%E6%97%A5%22,%22explanationParagraph%22%3A%22www.baidu.com%20%E9%80%9A%E5%B8%B8%E4%BC%9A%E4%BD%BF%E7%94%A8%E5%8A%A0%E5%AF%86%E6%8A%80%E6%9C%AF%E6%9D%A5%E4%BF%9D%E6%8A%A4%E6%82%A8%E7%9A%84%E4%BF%A1%E6%81%AF%E3%80%82Google%20Chrome%20%E6%AD%A4%E6%AC%A1%E5%B0%9D%E8%AF%95%E8%BF%9E%E6%8E%A5%E5%88%B0%20www.baidu.com%20%E6%97%B6%EF%BC%8C%E6%AD%A4%E7%BD%91%E7%AB%99%E5%8F%91%E5%9B%9E%E4%BA%86%E5%BC%82%E5%B8%B8%E7%9A%84%E9%94%99%E8%AF%AF%E5%87%AD%E6%8D%AE%E3%80%82%E8%BF%99%E5%8F%AF%E8%83%BD%E6%98%AF%E5%9B%A0%E4%B8%BA%E6%9C%89%E6%94%BB%E5%87%BB%E8%80%85%E5%9C%A8%E8%AF%95%E5%9B%BE%E5%86%92%E5%85%85%20www.baidu.com%EF%BC%8C%E6%88%96%20Wi-Fi%20%E7%99%BB%E5%BD%95%E5%B1%8F%E5%B9%95%E4%B8%AD%E6%96%AD%E4%BA%86%E6%AD%A4%E6%AC%A1%E8%BF%9E%E6%8E%A5%E3%80%82%E8%AF%B7%E6%94%BE%E5%BF%83%EF%BC%8C%E6%82%A8%E7%9A%84%E4%BF%A1%E6%81%AF%E4%BB%8D%E7%84%B6%E6%98%AF%E5%AE%89%E5%85%A8%E7%9A%84%EF%BC%8C%E5%9B%A0%E4%B8%BA%20Google%20Chrome%20%E5%B0%9A%E6%9C%AA%E8%BF%9B%E8%A1%8C%E4%BB%BB%E4%BD%95%E6%95%B0%E6%8D%AE%E4%BA%A4%E6%8D%A2%E4%BE%BF%E5%81%9C%E6%AD%A2%E4%BA%86%E8%BF%9E%E6%8E%A5%E3%80%82%22,%22finalParagraph%22%3A%22%E6%82%A8%E7%9B%AE%E5%89%8D%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AEwww.baidu.com%EF%BC%8C%E5%9B%A0%E4%B8%BA%E6%AD%A4%E7%BD%91%E7%AB%99%5Cu003Ca%20href=%5C%22%23%5C%22%20id=%5C%22help-link%5C%22%3E%E4%BD%BF%E7%94%A8%E4%BA%86HSTS%5Cu003C/a%3E%E3%80%82%E7%BD%91%E7%BB%9C%E9%94%99%E8%AF%AF%E5%92%8C%E6%94%BB%E5%87%BB%E9%80%9A%E5%B8%B8%E6%98%AF%E6%9A%82%E6%97%B6%E7%9A%84%EF%BC%8C%E5%9B%A0%E6%AD%A4%EF%BC%8C%E6%AD%A4%E7%BD%91%E9%A1%B5%E7%A8%8D%E5%90%8E%E5%8F%AF%E8%83%BD%E4%BC%9A%E6%81%A2%E5%A4%8D%E6%AD%A3%E5%B8%B8%E3%80%82%22,%22fontfamily%22%3A%22'Segoe%20UI',Arial,'Microsoft%20Yahei',sans-serif%22,%22fontsize%22%3A%2275%25%22,%22heading%22%3A%22%E6%82%A8%E7%9A%84%E8%BF%9E%E6%8E%A5%E4%B8%8D%E6%98%AF%E7%A7%81%E5%AF%86%E8%BF%9E%E6%8E%A5%22,%22issuer%22%3A%22Symantec%20Class%203%20Secure%20Server%20CA%20-%20G4%22,%22language%22%3A%22zh%22,%22openDetails%22%3A%22%E9%AB%98%E7%BA%A7%22,%22optInLink%22%3A%22%E8%87%AA%E5%8A%A8%E5%90%91%20Google%20%E6%8A%A5%E5%91%8A%E5%8F%AF%E8%83%BD%E5%87%BA%E7%8E%B0%E7%9A%84%E5%AE%89%E5%85%A8%E4%BA%8B%E4%BB%B6%E8%AF%A6%E6%83%85%E3%80%82%5Cu003Ca%20id=%5C%22privacy-link%5C%22%20href=%5C%22%5C%22%20onclick=%5C%22sendCommand(10);%20return%20false;%5C%22%20onmousedown=%5C%22return%20false;%5C%22%3E%E9%9A%90%E7%A7%81%E6%9D%83%E6%94%BF%E7%AD%96%5Cu003C/a%3E%22,%22overridable%22%3Afalse,%22pem%22%3A%22-----BEGIN%20CERTIFICATE-----%5CnMIIHOjCCBiKgAwIBAgIPAaAMWZKgoUJvdRQzvVy/MA0GCSqGSIb3DQEBCwUAMH4x%5CnCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0G%5CnA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMg%5CnQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQwHhcNMTYwODE1MDAwMDAwWhcN%5CnMTcwODE2MjM1OTU5WjCBqDELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB2JlaWppbmcx%5CnEDAOBgNVBAcMB2JlaWppbmcxOTA3BgNVBAoMMEJlaUppbmcgQmFpZHUgTmV0Y29t%5CnIFNjaWVuY2UgVGVjaG5vbG9neSBDby4sIEx0ZDEmMCQGA1UECwwdc2VydmljZSBv%5CncGVyYXRpb24gZGVwYXJ0bWVudC4xEjAQBgNVBAMMCWJhaWR1LmNvbTCCASIwDQYJ%5CnKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMsV6Ty0lfOjGN04Pmd8m0OuU0aWrFnm%5CnKqsvkcxEtFfT9lgyhrZe3Tbyq7xjMsNluuJFeRlvxgszGgS/LNxfpkaY6sg67R/t%5CnvaxB8LmuIJn9e7RI3dZUoyZDTBFWTovVsdoOlnF00YRRKN9tbKo1rK4rzux+gqRt%5Cnf4Hsk+mjTBhPkY0J/4qocUGeGYxPjHlPIJABBN5UttUv3Be10fhUzP1OHHyj+iYq%5CnK/PsMIo+PoZclb0ox1K4Vvg3czjy8BAF76sw+mqr/w/v16WemjFADyIqoUXuBQyh%5Cnp3h4FmgmiXSRJeJ8ik9tzzjdIb0KhrRbdjQJyA4pDujYKk2g+4Ht2R0CAwEAAaOC%5CnA4gwggOEMIIBMwYDVR0RBIIBKjCCASaCCyouYmFpZHUuY29tgg4qLmJhaWZ1YmFv%5CnLmNvbYIOKi5iZHN0YXRpYy5jb22CDCouaGFvMTIzLmNvbYILKi5udW9taS5jb22C%5CnDyouYmNlLmJhaWR1LmNvbYIQKi5leXVuLmJhaWR1LmNvbYIPKi5tYXAuYmFpZHUu%5CnY29tggliYWlkdS5jb22CDGJhaWZ1YmFvLmNvbYIMd3d3LmJhaWR1LmNughB3d3cu%5CnYmFpZHUuY29tLmNughJjbGljay5obS5iYWlkdS5jb22CEGxvZy5obS5iYWlkdS5j%5Cnb22CEGNtLnBvcy5iYWlkdS5jb22CEHduLnBvcy5iYWlkdS5jb22CFHVwZGF0ZS5w%5CnYW4uYmFpZHUuY29tgg9tY3QueS5udW9taS5jb20wCQYDVR0TBAIwADAOBgNVHQ8B%5CnAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMGEGA1UdIARa%5CnMFgwVgYGZ4EMAQICMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20v%5CnY3BzMCUGCCsGAQUFBwICMBkMF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMB8GA1Ud%5CnIwQYMBaAFF9gz2GQVd+EQxSKYCqy9Xr0QxjvMCsGA1UdHwQkMCIwIKAeoByGGmh0%5CndHA6Ly9zcy5zeW1jYi5jb20vc3MuY3JsMFcGCCsGAQUFBwEBBEswSTAfBggrBgEF%5CnBQcwAYYTaHR0cDovL3NzLnN5bWNkLmNvbTAmBggrBgEFBQcwAoYaaHR0cDovL3Nz%5CnLnN5bWNiLmNvbS9zcy5jcnQwggEFBgorBgEEAdZ5AgQCBIH2BIHzAPEAdwDd6x0r%5Cneg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+zAAAAVaQfkc6AAAEAwBIMEYCIQCT%5CnLTzo3DYr1v3qgw30B/37GzgST+iXqZtWj1FjVrawzQIhAMxUeruo6bLLmlqsE4hW%5CnYcDOu8hivJK4TefT1NDhb07DAHYApLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fN%5CnDsgN3BAAAAFWkH5HWgAABAMARzBFAiAfRCG9WGKLQhLcPg5Dv+8MqUslHec5awM8%5CnahTB4Y0ddwIhAIzuy0JBUsTmk+Eg5ArobPqgXYFc1llXRceY4uTZiASZMA0GCSqG%5CnSIb3DQEBCwUAA4IBAQBBLDatqFCdrwIrDoenQ7eCPpp1H0G9BvHI+5JAXQiI6Und%5CniSkaq7A9WvgAsVGNw1wGZIjysBQaf2VhJpbSFZwz9D9t3pmTAApVSY0uUvqiFg7X%5CnNqDoqu3iyBBNw5hGzP/AzU2RoT1Sd7bf57xBEW5W1nxogMSE1ACNf/8WZwixZk5t%5Cn5RcW6zvGQiJ8+3OA+NA8tyUcGj1mhDBb7Z4yjbn8cily5DA34nXpiYXnHGic5TLn%5CnQkaFIbZ9z7GqroE8oLrTUhOy+ZFNsrwanNO+gqf6c59V+1hQzRvkKN24JzdWjwHx%5Cnjsl/tY61DHvNFsmc683ggLjI+ZWMya1UcDmxADhN%5Cn-----END%20CERTIFICATE-----%5Cn-----BEGIN%20CERTIFICATE-----%5CnMIIFODCCBCCgAwIBAgIQUT+5dDhwtzRAQY0wkwaZ/zANBgkqhkiG9w0BAQsFADCB%5CnyjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL%5CnExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp%5CnU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW%5CnZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0%5CnaG9yaXR5IC0gRzUwHhcNMTMxMDMxMDAwMDAwWhcNMjMxMDMwMjM1OTU5WjB+MQsw%5CnCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV%5CnBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVjIENs%5CnYXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MIIBIjANBgkqhkiG9w0BAQEFAAOC%5CnAQ8AMIIBCgKCAQEAstgFyhx0LbUXVjnFSlIJluhL2AzxaJ+aQihiw6UwU35VEYJb%5CnA3oNL+F5BMm0lncZgQGUWfm893qZJ4Itt4PdWid/sgN6nFMl6UgfRk/InSn4vnlW%5Cn9vf92Tpo2otLgjNBEsPIPMzWlnqEIRoiBAMnF4scaGGTDw5RgDMdtLXO637QYqzu%5Cns3sBdO9pNevK1T2p7peYyo2qRA4lmUoVlqTObQJUHypqJuIGOmNIrLRM0XWTUP8T%5CnL9ba4cYY9Z/JJV3zADreJk20KQnNDz0jbxZKgRb78oMQw7jW2FUyPfG9D72MUpVK%5CnFpd6UiFjdS8W+cRmvvW1Cdj/JwDNRHxvSz+w9wIDAQABo4IBYzCCAV8wEgYDVR0T%5CnAQH/BAgwBgEB/wIBADAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vczEuc3ltY2Iu%5CnY29tL3BjYTMtZzUuY3JsMA4GA1UdDwEB/wQEAwIBBjAvBggrBgEFBQcBAQQjMCEw%5CnHwYIKwYBBQUHMAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wawYDVR0gBGQwYjBgBgpg%5CnhkgBhvhFAQc2MFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuc3ltYXV0aC5jb20v%5CnY3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6Ly93d3cuc3ltYXV0aC5jb20vcnBhMCkG%5CnA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0xLTUzNDAdBgNVHQ4E%5CnFgQUX2DPYZBV34RDFIpgKrL1evRDGO8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnz%5CnQzn6Aq8zMTMwDQYJKoZIhvcNAQELBQADggEBAF6UVkndji1l9cE2UbYD49qecxny%5CnH1mrWH5sJgUs+oHXXCMXIiw3k/eG7IXmsKP9H+IyqEVv4dn7ua/ScKAyQmW/hP4W%5CnKo8/xabWo5N9Q+l0IZE1KPRj6S7t9/Vcf0uatSDpCr3gRRAMFJSaXaXjS5HoJJtG%5CnQGX0InLNmfiIEfXzf+YzguaoxX7+0AjiJVgIcWjmzaLmFN5OUiQt/eV5E1PnXi8t%5CnTRttQBVSK/eHiXgSgW7ZTaoteNTCLD0IX4eRnh8OsN4wUmSGiaqdZpwOdgyA8nTY%5CnKvi4Os7X1g8RvmurFPW9QaAiY4nxug9vKWNmLT+sjHLF+8fk1A/yO0+MKcc=%5Cn-----END%20CERTIFICATE-----%5Cn-----BEGIN%20CERTIFICATE-----%5CnMIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB%5CnyjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL%5CnExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp%5CnU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW%5CnZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0%5CnaG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL%5CnMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW%5CnZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln%5CnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp%5CnU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y%5CnaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1%5CnnmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex%5Cnt0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz%5CnSdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG%5CnBO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+%5CnrCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/%5CnNIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E%5CnBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH%5CnBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy%5CnaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv%5CnMzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE%5Cnp6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y%5Cn5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK%5CnWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ%5Cn4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N%5CnhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq%5Cn-----END%20CERTIFICATE-----%5Cn%22,%22primaryButtonText%22%3A%22%E9%87%8D%E6%96%B0%E5%8A%A0%E8%BD%BD%22,%22primaryParagraph%22%3A%22%E6%94%BB%E5%87%BB%E8%80%85%E5%8F%AF%E8%83%BD%E4%BC%9A%E8%AF%95%E5%9B%BE%E4%BB%8E%5Cu003Cstrong%3Ewww.baidu.com%5Cu003C/strong%3E%E7%AA%83%E5%8F%96%E6%82%A8%E7%9A%84%E4%BF%A1%E6%81%AF%EF%BC%88%E4%BE%8B%E5%A6%82%EF%BC%9A%E5%AF%86%E7%A0%81%E3%80%81%E9%80%9A%E8%AE%AF%E5%86%85%E5%AE%B9%E6%88%96%E4%BF%A1%E7%94%A8%E5%8D%A1%E4%BF%A1%E6%81%AF%EF%BC%89%E3%80%82%22,%22subject%22%3A%22baidu.com%22,%22tabTitle%22%3A%22%E9%9A%90%E7%A7%81%E8%AE%BE%E7%BD%AE%E9%94%99%E8%AF%AF%22,%22textdirection%22%3A%22ltr%22,%22type%22%3A%22SSL%22%7D;%3C/script%3E%3Cscript%3E//%20Copyright%20(c)%202012%20The%20Chromium%20Authors.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A//%20//%20Copyright%20(c)%202012%20The%20Chromium%20Authors.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A/**%20@typedef%20%7BDocument%7CDocumentFragment%7CElement%7D%20*/%0Avar%20ProcessingRoot;%0A%0A/**%0A%20*%20@fileoverview%20This%20is%20a%20simple%20template%20engine%20inspired%20by%20JsTemplates%0A%20*%20optimized%20for%20i18n.%0A%20*%0A%20*%20It%20currently%20supports%20three%20handlers%3A%0A%20*%0A%20*%20%20%20*%20i18n-content%20which%20sets%20the%20textContent%20of%20the%20element.%0A%20*%0A%20*%20%20%20%20%20%3Cspan%20i18n-content=%22myContent%22%3E%3C/span%3E%0A%20*%0A%20*%20%20%20*%20i18n-options%20which%20generates%20%3Coption%3E%20elements%20for%20a%20%3Cselect%3E.%0A%20*%0A%20*%20%20%20%20%20%3Cselect%20i18n-options=%22myOptionList%22%3E%3C/select%3E%0A%20*%0A%20*%20%20%20*%20i18n-values%20is%20a%20list%20of%20attribute-value%20or%20property-value%20pairs.%0A%20*%20%20%20%20%20Properties%20are%20prefixed%20with%20a%20'.'%20and%20can%20contain%20nested%20properties.%0A%20*%0A%20*%20%20%20%20%20%3Cspan%20i18n-values=%22title%3AmyTitle;.style.fontSize%3AfontSize%22%3E%3C/span%3E%0A%20*%0A%20*%20This%20file%20is%20a%20copy%20of%20i18n_template.js,%20with%20minor%20tweaks%20to%20support%20using%0A%20*%20load_time_data.js.%20It%20should%20replace%20i18n_template.js%20eventually.%0A%20*/%0A%0Avar%20i18nTemplate%20=%20(function()%20%7B%0A%20%20/**%0A%20%20%20*%20This%20provides%20the%20handlers%20for%20the%20templating%20engine.%20The%20key%20is%20used%20as%0A%20%20%20*%20the%20attribute%20name%20and%20the%20value%20is%20the%20function%20that%20gets%20called%20for%20every%0A%20%20%20*%20single%20node%20that%20has%20this%20attribute.%0A%20%20%20*%20@type%20%7B!Object%7D%0A%20%20%20*/%0A%20%20var%20handlers%20=%20%7B%0A%20%20%20%20/**%0A%20%20%20%20%20*%20This%20handler%20sets%20the%20textContent%20of%20the%20element.%0A%20%20%20%20%20*%20@param%20%7B!HTMLElement%7D%20element%20The%20node%20to%20modify.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20key%20The%20name%20of%20the%20value%20in%20%7Cdata%7C.%0A%20%20%20%20%20*%20@param%20%7B!LoadTimeData%7D%20data%20The%20data%20source%20to%20draw%20from.%0A%20%20%20%20%20*%20@param%20%7B!Set%3CProcessingRoot%3E%7D%20visited%0A%20%20%20%20%20*/%0A%20%20%20%20'i18n-content'%3A%20function(element,%20key,%20data,%20visited)%20%7B%0A%20%20%20%20%20%20element.textContent%20=%20data.getString(key);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20This%20handler%20adds%20options%20to%20a%20%3Cselect%3E%20element.%0A%20%20%20%20%20*%20@param%20%7B!HTMLElement%7D%20select%20The%20node%20to%20modify.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20key%20The%20name%20of%20the%20value%20in%20%7Cdata%7C.%20It%20should%0A%20%20%20%20%20*%20%20%20%20%20identify%20an%20array%20of%20values%20to%20initialize%20an%20%3Coption%3E.%20Each%20value,%0A%20%20%20%20%20*%20%20%20%20%20if%20a%20pair,%20represents%20%5Bcontent,%20value%5D.%20Otherwise,%20it%20should%20be%20a%0A%20%20%20%20%20*%20%20%20%20%20content%20string%20with%20no%20value.%0A%20%20%20%20%20*%20@param%20%7B!LoadTimeData%7D%20data%20The%20data%20source%20to%20draw%20from.%0A%20%20%20%20%20*%20@param%20%7B!Set%3CProcessingRoot%3E%7D%20visited%0A%20%20%20%20%20*/%0A%20%20%20%20'i18n-options'%3A%20function(select,%20key,%20data,%20visited)%20%7B%0A%20%20%20%20%20%20var%20options%20=%20data.getValue(key);%0A%20%20%20%20%20%20options.forEach(function(optionData)%20%7B%0A%20%20%20%20%20%20%20%20var%20option%20=%20typeof%20optionData%20==%20'string'%20%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20new%20Option(optionData)%20%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20new%20Option(optionData%5B1%5D,%20optionData%5B0%5D);%0A%20%20%20%20%20%20%20%20select.appendChild(option);%0A%20%20%20%20%20%20%7D);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20This%20is%20used%20to%20set%20HTML%20attributes%20and%20DOM%20properties.%20The%20syntax%20is%3A%0A%20%20%20%20%20*%20%20%20attributename%3Akey;%0A%20%20%20%20%20*%20%20%20.domProperty%3Akey;%0A%20%20%20%20%20*%20%20%20.nested.dom.property%3Akey%0A%20%20%20%20%20*%20@param%20%7B!HTMLElement%7D%20element%20The%20node%20to%20modify.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20attributeAndKeys%20The%20path%20of%20the%20attribute%20to%20modify%0A%20%20%20%20%20*%20%20%20%20%20followed%20by%20a%20colon,%20and%20the%20name%20of%20the%20value%20in%20%7Cdata%7C.%0A%20%20%20%20%20*%20%20%20%20%20Multiple%20attribute/key%20pairs%20may%20be%20separated%20by%20semicolons.%0A%20%20%20%20%20*%20@param%20%7B!LoadTimeData%7D%20data%20The%20data%20source%20to%20draw%20from.%0A%20%20%20%20%20*%20@param%20%7B!Set%3CProcessingRoot%3E%7D%20visited%0A%20%20%20%20%20*/%0A%20%20%20%20'i18n-values'%3A%20function(element,%20attributeAndKeys,%20data,%20visited)%20%7B%0A%20%20%20%20%20%20var%20parts%20=%20attributeAndKeys.replace(/%5Cs/g,%20'').split(/;/);%0A%20%20%20%20%20%20parts.forEach(function(part)%20%7B%0A%20%20%20%20%20%20%20%20if%20(!part)%0A%20%20%20%20%20%20%20%20%20%20return;%0A%0A%20%20%20%20%20%20%20%20var%20attributeAndKeyPair%20=%20part.match(/%5E(%5B%5E%3A%5D+)%3A(.+)$/);%0A%20%20%20%20%20%20%20%20if%20(!attributeAndKeyPair)%0A%20%20%20%20%20%20%20%20%20%20throw%20new%20Error('malformed%20i18n-values%3A%20'%20+%20attributeAndKeys);%0A%0A%20%20%20%20%20%20%20%20var%20propName%20=%20attributeAndKeyPair%5B1%5D;%0A%20%20%20%20%20%20%20%20var%20propExpr%20=%20attributeAndKeyPair%5B2%5D;%0A%0A%20%20%20%20%20%20%20%20var%20value%20=%20data.getValue(propExpr);%0A%0A%20%20%20%20%20%20%20%20//%20Allow%20a%20property%20of%20the%20form%20'.foo.bar'%20to%20assign%20a%20value%20into%0A%20%20%20%20%20%20%20%20//%20element.foo.bar.%0A%20%20%20%20%20%20%20%20if%20(propName%5B0%5D%20==%20'.')%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20path%20=%20propName.slice(1).split('.');%0A%20%20%20%20%20%20%20%20%20%20var%20targetObject%20=%20element;%0A%20%20%20%20%20%20%20%20%20%20while%20(targetObject%20&amp;&amp;%20path.length%20%3E%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20targetObject%20=%20targetObject%5Bpath.shift()%5D;%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20(targetObject)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20targetObject%5Bpath%5D%20=%20value;%0A%20%20%20%20%20%20%20%20%20%20%20%20//%20In%20case%20we%20set%20innerHTML%20(ignoring%20others)%20we%20need%20to%20recursively%0A%20%20%20%20%20%20%20%20%20%20%20%20//%20check%20the%20content.%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(path%20==%20'innerHTML')%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20(var%20i%20=%200;%20i%20%3C%20element.children.length;%20++i)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20processWithoutCycles(element.children%5Bi%5D,%20data,%20visited,%20false);%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20element.setAttribute(propName,%20/**%20@type%20%7Bstring%7D%20*/(value));%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D);%0A%20%20%20%20%7D%0A%20%20%7D;%0A%0A%20%20var%20prefixes%20=%20%5B''%5D;%0A%0A%20%20//%20Only%20look%20through%20shadow%20DOM%20when%20it's%20supported.%20As%20of%20April%202015,%20iOS%0A%20%20//%20Chrome%20doesn't%20support%20shadow%20DOM.%0A%20%20if%20(Element.prototype.createShadowRoot)%0A%20%20%20%20prefixes.push('*%20/deep/%20');%0A%0A%20%20var%20attributeNames%20=%20Object.keys(handlers);%0A%20%20var%20selector%20=%20prefixes.map(function(prefix)%20%7B%0A%20%20%20%20return%20prefix%20+%20'%5B'%20+%20attributeNames.join('%5D,%20'%20+%20prefix%20+%20'%5B')%20+%20'%5D';%0A%20%20%7D).join(',%20');%0A%0A%20%20/**%0A%20%20%20*%20Processes%20a%20DOM%20tree%20using%20a%20%7Cdata%7C%20source%20to%20populate%20template%20values.%0A%20%20%20*%20@param%20%7B!ProcessingRoot%7D%20root%20The%20root%20of%20the%20DOM%20tree%20to%20process.%0A%20%20%20*%20@param%20%7B!LoadTimeData%7D%20data%20The%20data%20to%20draw%20from.%0A%20%20%20*/%0A%20%20function%20process(root,%20data)%20%7B%0A%20%20%20%20processWithoutCycles(root,%20data,%20new%20Set(),%20true);%0A%20%20%7D%0A%0A%20%20/**%0A%20%20%20*%20Internal%20process()%20method%20that%20stops%20cycles%20while%20processing.%0A%20%20%20*%20@param%20%7B!ProcessingRoot%7D%20root%0A%20%20%20*%20@param%20%7B!LoadTimeData%7D%20data%0A%20%20%20*%20@param%20%7B!Set%3CProcessingRoot%3E%7D%20visited%20Already%20visited%20roots.%0A%20%20%20*%20@param%20%7Bboolean%7D%20mark%20Whether%20nodes%20should%20be%20marked%20processed.%0A%20%20%20*/%0A%20%20function%20processWithoutCycles(root,%20data,%20visited,%20mark)%20%7B%0A%20%20%20%20if%20(visited.has(root))%20%7B%0A%20%20%20%20%20%20//%20Found%20a%20cycle.%20Stop%20it.%0A%20%20%20%20%20%20return;%0A%20%20%20%20%7D%0A%0A%20%20%20%20//%20Mark%20the%20node%20as%20visited%20before%20recursing.%0A%20%20%20%20visited.add(root);%0A%0A%20%20%20%20var%20importLinks%20=%20root.querySelectorAll('link%5Brel=import%5D');%0A%20%20%20%20for%20(var%20i%20=%200;%20i%20%3C%20importLinks.length;%20++i)%20%7B%0A%20%20%20%20%20%20var%20importLink%20=%20/**%20@type%20%7B!HTMLLinkElement%7D%20*/(importLinks%5Bi%5D);%0A%20%20%20%20%20%20if%20(!importLink.import)%20%7B%0A%20%20%20%20%20%20%20%20//%20Happens%20when%20a%20%3Clink%20rel=import%3E%20is%20inside%20a%20%3Ctemplate%3E.%0A%20%20%20%20%20%20%20%20//%20TODO(dbeam)%3A%20should%20we%20log%20an%20error%20if%20we%20detect%20that%20here%3F%0A%20%20%20%20%20%20%20%20continue;%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20processWithoutCycles(importLink.import,%20data,%20visited,%20mark);%0A%20%20%20%20%7D%0A%0A%20%20%20%20var%20templates%20=%20root.querySelectorAll('template');%0A%20%20%20%20for%20(var%20i%20=%200;%20i%20%3C%20templates.length;%20++i)%20%7B%0A%20%20%20%20%20%20var%20template%20=%20/**%20@type%20%7BHTMLTemplateElement%7D%20*/(templates%5Bi%5D);%0A%20%20%20%20%20%20if%20(!template.content)%0A%20%20%20%20%20%20%20%20continue;%0A%20%20%20%20%20%20processWithoutCycles(template.content,%20data,%20visited,%20mark);%0A%20%20%20%20%7D%0A%0A%20%20%20%20var%20isElement%20=%20root%20instanceof%20Element;%0A%20%20%20%20if%20(isElement%20&amp;&amp;%20root.webkitMatchesSelector(selector))%0A%20%20%20%20%20%20processElement(/**%20@type%20%7B!Element%7D%20*/(root),%20data,%20visited);%0A%0A%20%20%20%20var%20elements%20=%20root.querySelectorAll(selector);%0A%20%20%20%20for%20(var%20i%20=%200;%20i%20%3C%20elements.length;%20++i)%20%7B%0A%20%20%20%20%20%20processElement(elements%5Bi%5D,%20data,%20visited);%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20(mark)%20%7B%0A%20%20%20%20%20%20var%20processed%20=%20isElement%20%3F%20%5Broot%5D%20%3A%20root.children;%0A%20%20%20%20%20%20if%20(processed)%20%7B%0A%20%20%20%20%20%20%20%20for%20(var%20i%20=%200;%20i%20%3C%20processed.length;%20++i)%20%7B%0A%20%20%20%20%20%20%20%20%20%20processed%5Bi%5D.setAttribute('i18n-processed',%20'');%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20/**%0A%20%20%20*%20Run%20through%20various%20%5Bi18n-*%5D%20attributes%20and%20populate.%0A%20%20%20*%20@param%20%7B!Element%7D%20element%0A%20%20%20*%20@param%20%7B!LoadTimeData%7D%20data%0A%20%20%20*%20@param%20%7B!Set%3CProcessingRoot%3E%7D%20visited%0A%20%20%20*/%0A%20%20function%20processElement(element,%20data,%20visited)%20%7B%0A%20%20%20%20for%20(var%20i%20=%200;%20i%20%3C%20attributeNames.length;%20i++)%20%7B%0A%20%20%20%20%20%20var%20name%20=%20attributeNames%5Bi%5D;%0A%20%20%20%20%20%20var%20attribute%20=%20element.getAttribute(name);%0A%20%20%20%20%20%20if%20(attribute%20!=%20null)%0A%20%20%20%20%20%20%20%20handlers%5Bname%5D(element,%20attribute,%20data,%20visited);%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20return%20%7B%0A%20%20%20%20process%3A%20process%0A%20%20%7D;%0A%7D());%0A%0A%0Ai18nTemplate.process(document,%20loadTimeData);%0A%3C/script%3E#" id="help-link" style="color: rgb(88, 88, 88);">使用了HSTS</a>。网络错误和攻击通常是暂时的，因此，此网页稍后可能会恢复正常。</font></p><p i18n-values=".innerHTML:finalParagraph" id="final-paragraph" style="margin-top: 20px; color: rgb(105, 105, 105); font-size: 15px; font-style: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(247, 247, 247); "><font class="Apple-style-span" face="Consolas"><br></font></p><p i18n-values=".innerHTML:finalParagraph" id="final-paragraph" style="margin-top: 20px; color: rgb(105, 105, 105); font-size: 15px; font-style: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(247, 247, 247); "><font class="Apple-style-span" face="Consolas"><br></font></p><p i18n-values=".innerHTML:finalParagraph" id="final-paragraph" style="margin-top: 20px; color: rgb(105, 105, 105); font-size: 15px; font-style: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(247, 247, 247); "><!--StartFragment--></p><div><font class="Apple-style-span" face="Consolas"><a href="//link.zhihu.com/?target=http%3A//www.williamlong.info/archives/2031.html" class=" wrap external" target="_blank" rel="nofollow noreferrer">中国电信屏蔽ADSL用户80端口<i class="icon-external"></i></a><br>只是做应用服务器的话你可以使用别的端口.<br><br>如果你想公开 --<br><br>HTTPS的443端口还能用, 还好电信这孙子没封.<br>关键是浏览器证书信任, 正规厂家的证书都挺贵的...<br>如果只是自己用的话, 自己发证书就连钱都不用花了.<br>当然你也可以折腾一下startssl免费证书, 提交个人隐私信息什么的,反正没尝试.<br>ps. <a href="//link.zhihu.com/?target=https%3A//letsencrypt.org/" class=" wrap external" target="_blank" rel="nofollow noreferrer">Let's Encrypt<i class="icon-external"></i></a> 免费证书项目似乎还没上线的样子.<br>pss.DDNS+SSL+树莓派服务器挂博客的路过. <br>psss. 现在Let's Encrypt上线了, 不过续期时间太短, 可以选择的免费证书还有沃通. 申请一次可以用两年, 只是不知道靠不靠谱了<br><br>作者：霓煤<br>链接：https://www.zhihu.com/question/21367235/answer/49678727<br>来源：知乎<br>著作权归作者所有，转载请联系作者获得授权。</font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas">Windows 目录仍使用GB系列，如何改成UTF-8呢？</font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><div><font class="Apple-style-span" face="Consolas"><br></font></div><!--EndFragment--><p style="font-family: Tahoma; "></p><!--EndFragment--></font></div><script type="text/javascript" language="javascript" src="jquery.js"></script><script type="text/javascript" language="javascript" src="itemlink.js"></script></body></html>